______ __ ______ ______ ______ __ __
/\ ___\ /\ \ /\ ___\ /\ __ \ /\ ___\ /\ \ /\ \
\ \ __\ \ \ \ \ \ __\ \ \ __ \ \ \ \____ \ \ \____ \ \ \
\ \_\ \ \_\ \ \_\ \ \_\ \_\ \ \_____\ \ \_____\ \ \_\
\/_/ \/_/ \/_/ \/_/\/_/ \/_____/ \/_____/ \/_/
Watch World Cup matches from your terminal. Automatically discovers free streams and launches mpv — no browser needed.
- Auto-detects the current live match from the schedule
- Scrapes streaming sites with a headless browser to find the
.m3u8URL - Falls back to official free broadcasters (CazeTV, BFM, ZDF, RTVE)
- Proxy support for geo-unblocking
| Tool | Purpose |
|---|---|
| mpv | Video player |
| fzf | Fuzzy-finder menu |
| yt-dlp | Stream extraction for official channels |
# Linux (Arch)
sudo pacman -S mpv fzf yt-dlp
# Linux (Debian/Ubuntu)
sudo apt install mpv fzf yt-dlp
# macOS (Homebrew)
brew install mpv fzf yt-dlp
# Windows (scoop)
scoop install mpv fzf yt-dlp| Tool | Purpose |
|---|---|
| streamlink | Fallback stream extractor |
| Python 3.14+ | Required for the auto-scraper |
| Playwright | Headless browser engine (installed automatically) |
# Clone the repo
git clone https://github.com/yourusername/wc-cli.git
cd wc-cli
# Make it executable
chmod +x fifacli
# Set up the Python scraper (one-time)
python3 -m venv scrapers/venv
scrapers/venv/bin/pip install playwright
scrapers/venv/bin/playwright install chromium
# Run it
./fifacli# Clone the repo
git clone https://github.com/yourusername/wc-cli.git
cd wc-cli
# Set up the Python scraper (one-time)
python -m venv scrapers\venv
scrapers\venv\Scripts\pip install playwright
scrapers\venv\Scripts\playwright install chromium
# Run it with Git Bash or WSL
.\fifacliNote: On Windows, run from Git Bash, WSL, or Cygwin — Bash is required.
./fifacli- Select a channel:
- Português (CazeTV) — YouTube live
- Français (BFM) — French stream
- Deutsch (ZDF) — German stream
- Español (RTVE) — Spanish stream
- Stream (scrape) — Auto-discover from trickscorner (see below)
- The match plays in
mpv - Press Enter to return to the menu
Select Stream (scrape) and it will:
- Detect the current live match from the built-in schedule
- Visit
trickscorner.xyzwith a headless Chromium - Scrape all match links from the page
- Match the live match name against the links (fuzzy)
- Follow the player redirect chain
- Extract the raw
.m3u8CDN URL - Play it in
mpv
If no match is live, it prompts for a match name manually.
Set a proxy in ~/.config/wc-cli/config:
HTTP_PROXY=socks5://127.0.0.1:1080
Edit ~/.config/wc-cli/config:
SCRAPE_BASE_URL=https://www.trickscorner.xyz
┌──────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌─────┐
│ fifacli │───▶ │ Playwright │───▶ │ Streaming CDN │────▶│ mpv │
│ (bash) │ │ headless Chrome │ │ .m3u8 stream │ │ │
└──────────┘ └──────────────────┘ └─────────────────┘ └─────┘
│ │
│ find_matches() │ discover_matches()
│ from schedule │ + extract_stream()
▼ ▼
"Portugal vs trickscorner.xyz
Congo DR" → /2026/06/...portugal-vs-dr-congo.html
→ playerdpku.blogspot.com?id=...
→ cloudfront.net/...chunklist.m3u8
The scraper uses Playwright (headless Chromium) to:
- Discover — visit the base URL, find all match links
- Match — fuzzy-match the schedule entry to the correct link
- Extract — intercept network requests for
.m3u8/.mpdfiles - Follow — if a player wrapper page is found, navigate into it
- Play — return the direct CDN
.m3u8URL tompv
| File | Purpose |
|---|---|
fifacli |
Main script (Bash) |
scrapers/extract_stream.py |
Playwright-based stream extractor |
scrapers/requirements.txt |
Python dependencies |
scrapers/venv/ |
Python virtual environment (gitignored) |
~/.config/wc-cli/config |
User configuration |