@officebeats/matrix-iptv-cli 3.3.0 → 3.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGES.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # IPTV App Changes Summary
2
2
 
3
+ ## Date: 2026-01-18 (v3.3.1)
4
+
5
+ ### Changes Implemented
6
+
7
+ #### ✅ 1. Restored Detailed Help Guides
8
+
9
+ - Re-implemented the technical and instructional depth for "The TUI Edge", "Playlist Acquisition", and "IPTV Protocol".
10
+ - Guides now feature rich formatting and specific advice (Marketplaces, Providers, Technical Specs).
11
+
12
+ #### ✅ 2. UI/UX Refinement
13
+
14
+ - Moved version identifier to the bottom-left of the footer for better visibility during testing.
15
+ - Updated Home Screen labels to be more descriptive ("The TUI Edge", "Understanding the Protocol").
16
+ - Fixed the "Gray Icon" issue caused by leftover sports league fallbacks.
17
+ - Simplified Category view to use a clean folder icon system.
18
+
19
+ #### ✅ 3. Improved MPV Isolation
20
+
21
+ - Detached MPV from terminal input/output to prevent keyboard shortcut conflicts.
22
+ - On Windows, MPV now runs in a detached process to ensure CLI focus remains on the app.
23
+
24
+ #### ✅ 4. Infrastructure & Test Sync
25
+
26
+ - Updated global `test-matrix-iptv` command and PowerShell profile to point to the current (OneDrive) workspace.
27
+ - Fixed a version mismatch where tests were running older cached binaries.
28
+ - Established a new `update_and_test` workflow to ensure builds are synced to the Node wrapper's `bin/` directory.
29
+
30
+ ---
31
+
3
32
  ## Date: 2025-12-27 (v3.0.8)
4
33
 
5
34
  ### Changes Implemented
package/README.md CHANGED
@@ -80,8 +80,8 @@ matrix-iptv
80
80
  - **🛡️ Multi-Select Playlist Modes**: Combine optimizations like **'Merica**, **Sports**, and **All-English** in real-time.
81
81
  - **⚡ Instant Response**: Built in Rust for maximum performance. Navigate tens of thousands of channels with zero lag.
82
82
  - **📡 Xtream API Native**: Strictly optimized for **Xtream API** providers (support for M3U is not planned at this time).
83
- - **🔎 Global Search**: Press **`Ctrl`+`Space`** (displayed as `🔎🌐 Ctrl+Space`) to search across Live TV, Movies, and Series content instantly.
84
- - **📁 Unified Navigation**: "All" views for Channels, Movies, and Series allow for rapid browsing without digging into categories.
83
+ - **🔎 Global Search**: Press **`Ctrl`+`Space`** (displayed as `🔎🌐 Ctrl+Space`) to search across Live TV, Movies, and Series content instantly. Results are limited to 100 items total (channels, movies, and series combined).
84
+ - **📁 Unified Navigation**: "All" views for Channels, Movies, and Series allow for rapid browsing without digging into categories. Use **Tab** to switch between categories and streams, **Left/Right** arrows to navigate panes. Use **Tab** to switch between categories and streams, **Left/Right** arrows to navigate panes.
85
85
  - **🎨 Color-Coded UX**: Rebuilt footer with screen-aware hints and color coding.
86
86
  - **🚥 Mode Indicators**: Colorful header indicators (Red/White/Blue for 'Merica, Yellow for Sports, Blue for All-English).
87
87
  - **📋 Paste Support**: Support for `Ctrl+V` in login fields for quick credentials setup.
@@ -89,7 +89,8 @@ matrix-iptv
89
89
  - **🎞️ VOD Experience**: Browse movies with rich metadata and instant playback.
90
90
  - **📟 Matrix Rain Screensaver**: A high-performance, authentic digital rain screensaver that activates when idle.
91
91
  - **🔒 Secure**: Uses Private DNS-over-HTTPS (DoH) for secure provider connection.
92
- - **👁️ Headless Playback**: Integrated borderless fullscreen mode for a cinematic experience.
92
+ - **⚡ Jump Navigation**: Press **`g`** to jump to bottom, **`G`** to jump to top, or **`0`-`9`** to jump directly to items 0-9 in any list.
93
+ - **⚡ Jump Navigation**: Press **`g`** to jump to bottom, **`G`** to jump to top, or **`0`-`9`** to jump directly to items 0-9 in any list.
93
94
 
94
95
  ## 🛡️ Playlist Modes
95
96
 
@@ -115,7 +116,8 @@ To change modes:
115
116
 
116
117
  We leverage advanced **MPV** flags to ensure professional-level video quality even on lower-end hardware:
117
118
 
118
- - **Headless Fullscreen**: Launches directly into borderless fullscreen (`--no-border`, `--fs`) for a professional, TV-like experience.
119
+ - **Fullscreen Mode**: Launches directly into fullscreen (`--fs`) for a professional, TV-like experience.
120
+ - **On Screen Controller**: Enables `--osc=yes` for usability and control.
119
121
  - **Advanced Anti-Aliasing**: Uses `spline36` scaling, providing superior edge smoothing.
120
122
  - **Oversample Upscaling**: High-quality temporal upscaling that sharpens images.
121
123
  - **Motion Smoothing**: High-performance `display-resample` interpolation for fluid sports playback.
@@ -125,22 +127,25 @@ We leverage advanced **MPV** flags to ensure professional-level video quality ev
125
127
 
126
128
  ## ⌨️ Common Controls
127
129
 
128
- | Key | Action |
129
- | :---------------------- | :-------------------------------------- |
130
- | **`Enter`** | **Play Channel / Select / Confirm** |
131
- | **`Esc` / `Backspace`** | **Go Back / Cancel** |
132
- | **`Ctrl` + `Space`** | **Global Search** (Search everything) |
133
- | **`f`** or **`/`** | **Local Search** (Filter current view) |
134
- | **`v`** | **Toggle Favorite** |
135
- | **`j` / `↓`** | Move Down |
136
- | **`k` / `↑`** | Move Up |
137
- | **`m`** | **Playlist Mode** (Quick Toggle/Switch) |
138
- | **`x`** | **Settings** |
139
- | **`n`** | **New Playlist** (Home Screen) |
140
- | **`e`** | **Edit Playlist** (Home Screen) |
141
- | **`d`** | **Delete Playlist** (Home Screen) |
142
- | **`r`** | **Refresh Playlist** (Global) |
143
- | **`q`** | **Quit** |
130
+ | Key | Action |
131
+ | :---------------------- | :-------------------------------------------- |
132
+ | **`Enter`** | **Play Channel / Select / Confirm** |
133
+ | **`Esc` / `Backspace`** | **Go Back / Cancel** |
134
+ | **`Ctrl` + `Space`** | **Global Search** (Search everything) |
135
+ | **`f`** or **`/`** | **Local Search** (Filter current view) |
136
+ | **`v`** | **Toggle Favorite** |
137
+ | **`j` / `↓`** | Move Down |
138
+ | **`k` / `↑`** | Move Up |
139
+ | **`g`** | **Jump to Bottom** (Go to last item) |
140
+ | **`G`** | **Jump to Top** (Go to first item) |
141
+ | **`0`-`9`** | **Jump to Item** (Direct access to items 0-9) |
142
+ | **`m`** | **Playlist Mode** (Quick Toggle/Switch) |
143
+ | **`x`** | **Settings** |
144
+ | **`n`** | **New Playlist** (Home Screen) |
145
+ | **`e`** | **Edit Playlist** (Home Screen) |
146
+ | **`d`** | **Delete Playlist** (Home Screen) |
147
+ | **`r`** | **Refresh Playlist** (Global) |
148
+ | **`q`** | **Quit** |
144
149
 
145
150
  ---
146
151
 
package/debug_dns.py ADDED
@@ -0,0 +1,11 @@
1
+ import requests
2
+
3
+ domain = "8884152.lbt4.xyz"
4
+ doh_url = f"https://dns.google/resolve?name={domain}"
5
+
6
+ print(f"Querying DoH for {domain}...")
7
+ try:
8
+ r = requests.get(doh_url, timeout=5)
9
+ print(r.json())
10
+ except Exception as e:
11
+ print(e)
@@ -0,0 +1,22 @@
1
+ import requests
2
+
3
+ url_ts = "http://zfruvync.duperab.xyz/live/PE1S9S8U/11EZZUMW/53504.ts"
4
+ url_m3u8 = "http://zfruvync.duperab.xyz/live/PE1S9S8U/11EZZUMW/53504.m3u8"
5
+ headers = {
6
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
7
+ }
8
+
9
+ def check(name, u):
10
+ print(f"Checking {name}...")
11
+ try:
12
+ r = requests.head(u, headers=headers, allow_redirects=False, timeout=5)
13
+ print(f"Status: {r.status_code}")
14
+ if 'Location' in r.headers:
15
+ print(f"Location: {r.headers['Location']}")
16
+ else:
17
+ print("No Location header")
18
+ except Exception as e:
19
+ print(f"Error: {e}")
20
+
21
+ check("TS", url_ts)
22
+ check("M3U8", url_m3u8)
@@ -0,0 +1,28 @@
1
+ import requests
2
+ import sys
3
+
4
+ url = "http://zfruvync.duperab.xyz/live/PE1S9S8U/11EZZUMW/53504.ts"
5
+ headers = {
6
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
7
+ "Referer": "http://zfruvync.duperab.xyz/"
8
+ }
9
+
10
+ print(f"Testing URL: {url}")
11
+ try:
12
+ with requests.get(url, headers=headers, stream=True, timeout=10) as r:
13
+ print(f"Status Code: {r.status_code}")
14
+ print("Headers:")
15
+ for k, v in r.headers.items():
16
+ print(f" {k}: {v}")
17
+
18
+ if r.status_code == 200:
19
+ print("\nReading first 64 bytes...")
20
+ chunk = next(r.iter_content(chunk_size=64))
21
+ print(f"Bytes len: {len(chunk)}")
22
+ if len(chunk) > 0:
23
+ print("SUCCESS: Stream is alive!")
24
+ else:
25
+ print(f"\nFAILURE: Server returned {r.status_code}")
26
+
27
+ except Exception as e:
28
+ print(f"\nEXCEPTION: {e}")
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@officebeats/matrix-iptv-cli",
3
- "version": "3.3.0",
3
+ "version": "3.3.6",
4
4
  "description": "The premium Terminal IPTV Decoder",
5
5
  "main": "index.js",
6
6
  "bin": {
package/response.html ADDED
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html style="height:100%">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title></title>
7
+ <script type="text/javascript">
8
+ var url="https://myhomenetwork.att.com";
9
+ var reason=["phishing"];
10
+ </script>
11
+
12
+ </head>
13
+ <body style="margin: 0 auto; padding: 0 auto; width:100%; height: 100%; overflow : hidden;">
14
+ <iframe src="" id="frame" seamless="seamless" style="margin: 0 auto; padding: 0 auto; border: 0; width:100%; height: 100%" > </iframe>
15
+
16
+ <script type="text/javascript">
17
+ document.getElementById('frame').src = url+"/networkprotected/index.html?reason="+reason[0]+"&source="+encodeURIComponent(window.location.href);
18
+ </script>
19
+ </body>
20
+ </html>
@@ -0,0 +1,50 @@
1
+ import urllib.request
2
+ import json
3
+ import time
4
+
5
+ accounts = [
6
+ {"name": "Strong 8K", "url": "http://pledge78502.cdn-akm.me:80", "user": "7c34d33c9e21", "pass": "037dacb169"},
7
+ {"name": "Trex", "url": "http://line.offcial-trex.pro", "user": "3a6aae52fb", "pass": "39c165888139"},
8
+ {"name": "Strong8k2-PC", "url": "http://zfruvync.duperab.xyz", "user": "PE1S9S8U", "pass": "11EZZUMW"},
9
+ {"name": "Mega OTT 1", "url": "http://line.4smart.in", "user": "45Z88W6", "pass": "Z7PHTX3"}
10
+ ]
11
+
12
+ print("=== Matrix IPTV Performance Benchmark (Python) ===")
13
+
14
+ for acc in accounts:
15
+ print(f"\nProcessing: {acc['name']}")
16
+
17
+ try:
18
+ # 1. Categories
19
+ start = time.time()
20
+ cat_url = f"{acc['url']}/player_api.php?username={acc['user']}&password={acc['pass']}&action=get_live_categories"
21
+ with urllib.request.urlopen(cat_url, timeout=30) as resp:
22
+ cats = json.loads(resp.read().decode())
23
+ duration = time.time() - start
24
+ print(f" ✅ Categories: {len(cats)} items in {duration:.2f}s")
25
+
26
+ # 2. Streams & MSNBC
27
+ print(" 🔍 Searching for MSNBC...")
28
+ start = time.time()
29
+ streams_url = f"{acc['url']}/player_api.php?username={acc['user']}&password={acc['pass']}&action=get_live_streams"
30
+ with urllib.request.urlopen(streams_url, timeout=120) as resp:
31
+ streams = json.loads(resp.read().decode())
32
+ duration = time.time() - start
33
+ print(f" ✅ Streams: {len(streams)} items in {duration:.2f}s")
34
+
35
+ msnbc = [s for s in streams if "MSNBC" in s.get("name", "")]
36
+ if msnbc:
37
+ print(f" 📍 Found {len(msnbc)} MSNBC streams:")
38
+ for s in msnbc[:3]:
39
+ stream_id = s.get("stream_id")
40
+ name = s.get("name")
41
+ play_url = f"{acc['url']}/live/{acc['user']}/{acc['pass']}/{stream_id}.ts"
42
+ print(f" - [{stream_id}] {name}")
43
+ print(f" Link: {play_url}")
44
+ else:
45
+ print(" ❌ MSNBC NOT FOUND.")
46
+
47
+ except Exception as e:
48
+ print(f" ❌ Error: {e}")
49
+
50
+ print("\n=== Benchmark Complete ===")
package/test_config.json CHANGED
@@ -2,9 +2,9 @@
2
2
  "accounts": [
3
3
  {
4
4
  "name": "Strong 8K",
5
- "base_url": "http://pledge78502.cdn-akm.me:80",
6
- "username": "7c34d33c9e21",
7
- "password": "037dacb169",
5
+ "base_url": "http://zfruvync.duperab.xyz",
6
+ "username": "PE1S9S8U",
7
+ "password": "11EZZUMW",
8
8
  "epg_url": null,
9
9
  "last_refreshed": null,
10
10
  "total_channels": null,