Web Python HLS IPTV - A multi-screen wall of 15,000+ live worldwide TV channels, styled after the famous multi-channel scene in Back to the Future Part II. Python stdlib server + hls.js, zero dependencies.
A wall of live television from around the world, all playing at once on one screen - the way Marty Jr. watches "channels 18, 24, 63, 109, 87 and the Weather Channel" on the big multi-screen TV in Back to the Future Part II. This one is real: every screen is a live stream, picked from 15,000+ free, publicly available IPTV channels indexed by iptv-org. It boots as a worldwide news wall (on-screen station name: OUTATIME), but every channel is connected - switch the whole wall to any category, filter by region, or search and pin any specific channel on any screen.
No accounts, no API keys, no build step, no dependencies beyond Python 3.
git clone https://github.com/Ringmast4r/back-to-the-future-tv.git
cd back-to-the-future-tv
python server.py
Open http://localhost:1985 (the year, of course). That is all.
server.py is Python standard library only. It serves the page and runs the small
CORS relay the browser needs to play third-party streams (see "How it works").
Opening index.html directly as a file will not work - use the server.
Docker, if you prefer:
docker build -t bttf-tv .
docker run -p 1985:1985 bttf-tv
- LAYOUT: Mosaic (one big screen + five), 6, 9, 12, or 4 screens.
- FEED: which category fills the wall. Defaults to News; switch to All, Sports, Movies, Music, and whatever else the data carries.
- REGION: World, N. America, Lat. America, Europe, Middle East, Africa, Asia, Oceania.
- Hover any screen for its tools: listen to it, re-roll it to a random channel in the current feed, or open the picker and search all channels by name, country, or category.
- One screen carries the sound at a time. Click a screen to listen to it; the rest stay muted. (Everything starts muted - browsers require a click before audio.)
- Shuffle All, Mute All, CRT FX (scanlines + curvature), Fullscreen.
- A screen that cannot get a signal quietly re-tunes itself to another channel.
- Keyboard: Left/Right arrows move the sound between screens, S shuffles everything, F toggles fullscreen, Esc closes the picker.
The header is the DeLorean's time circuits: Destination Time is Oct 21 2015 (the day Marty arrives in the future), Present Time is live, Last Time Departed is when you loaded the page.
index.htmlis the whole app: it fetcheschannels.json, filters it client-side (junk names dropped, geo-blocked feeds hidden by default), assigns each channel a cable-style number, and plays each screen with hls.js.- Browsers block hls.js from fetching streams whose servers do not send CORS headers,
which is most of them.
server.pytherefore includes a tiny relay:/proxy?u=<url>fetches the stream server-side and re-serves it withAccess-Control-Allow-Origin: *, rewriting the m3u8 playlists so every variant and segment also comes back through the relay, and passing through the per-stream User-Agent/Referer headers some CDNs demand. - The relay does not bypass geo-blocking (it shares your IP address) and does not touch DRM or tokenized streams. Those fail with their real upstream status code.
The repo ships with a channels.json snapshot so the wall works out of the box, but
live IPTV streams rot - channels move, die, and appear all the time. Refresh anytime:
python update_channels.py
It downloads the current iptv-org playlist and stream database (about 20 MB) and
rewrites channels.json (~15,000 channels; adult channels are skipped). Reload the
page afterwards.
- These are free, publicly available streams run by third parties. Some are down at any given moment, some are geo-blocked outside their home country (hidden by default), and quality varies wildly. That is the nature of the beast; the wall auto-skips dead screens.
- Each visible screen is a live video stream. Six screens is comfortable on most machines; 9 or 12 want a strong CPU and good bandwidth.
- This project hosts no streams and no video. It is a viewer for the public index maintained by iptv-org. Whether a given stream is legal to watch depends on the stream and on where you live - that responsibility is yours.
- Channel data: iptv-org, the community index of publicly available IPTV channels.
- Playback: hls.js (Apache-2.0), vendored as
hls.min.jsso the wall works offline-ish with no CDN. - Inspired by the multi-screen TV scene in Back to the Future Part II (1989). This is a fan project; no affiliation with the film or its rights holders.
MIT - see LICENSE.