- JavaScript 92.8%
- Dockerfile 7.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| music | ||
| streamer | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
WeatherStar 4000+ → Jellyfin Live TV
Turns WeatherStar 4000+ (ws4kp) into a 24/7 weather channel in Jellyfin. ws4kp uses National Weather Service data, so it covers US locations only.
How it works: the weatherstar-tv container opens the WeatherStar page in Chromium on a virtual display (kiosk mode, your location baked into the URL), captures it with ffmpeg, and serves it as a standard IPTV channel:
| URL | Purpose |
|---|---|
http://<host>:9798/playlist.m3u |
M3U tuner for Jellyfin |
http://<host>:9798/guide.xml |
XMLTV guide ("Local Forecast" every hour) |
http://<host>:9798/stream.ts |
The live MPEG-TS stream (H.264 + AAC) |
http://<host>:9798/snapshot.png |
Screenshot of what the browser is showing right now |
http://<host>:9798/health |
Status JSON |
Encoding only runs while someone is watching; it stops 20 s after the last viewer leaves.
1. Set your location
Edit docker-compose.yml → weatherstar-tv → environment:
- Option A: set
LOCATION_NAME(e.g.Indianapolis, IN, USA) and optionallyLATITUDE/LONGITUDEfor an exact point. - Option B: open the web UI (
http://<host>:8080), search your city, pick displays/units, click Copy Permalink at the bottom, and paste it intoPERMALINK. This captures every setting you chose. The streamer rewrites the host to the localws4kpcontainer automatically.
2. Start it
docker compose up -d --build
Give it ~30 seconds, then check http://<host>:9798/snapshot.png — you should see the forecast playing. If you'd rather not run your own copy of the web app, delete the ws4kp service and set WS4KP_URL: "https://weatherstar.netbymatt.com/".
3. Add it to Jellyfin
- Dashboard → Live TV → Tuner Devices → +
- Tuner type: M3U Tuner
- File or URL:
http://<host>:9798/playlist.m3u - Leave Allow fMP4 transcoding container off. Save.
- Dashboard → Live TV → TV Guide Data Providers → + → XMLTV
- File or URL:
http://<host>:9798/guide.xml. Save.
- File or URL:
- If the channel shows "no guide data", use Map Channels on the XMLTV provider and map WeatherStar 4000 → WeatherStar 4000.
- Dashboard → Scheduled Tasks → Refresh Guide → Run.
The channel appears under Live TV as channel 4000.
Use your server's LAN IP for
<host>, notlocalhost— unless Jellyfin runs in the same compose project, in which casehttp://weatherstar-tv:9798/playlist.m3uworks. If Jellyfin requests the playlist by one address but must stream from another, setPUBLIC_URL.
Options
| Variable | Default | Notes |
|---|---|---|
LOCATION_NAME |
Indianapolis, IN, USA | Searched like the app's location box; ignored when PERMALINK is set |
LATITUDE / LONGITUDE |
– | Optional exact coordinates (skips the search) |
PERMALINK |
– | Paste from "Copy Permalink" |
VIEW_MODE |
wide |
standard (4:3, 960×720), wide, wide-enhanced (16:9, 1280×720) |
UNITS |
us |
us or si (metric) |
SCAN_LINES |
false |
CRT scan-line effect |
EXTRA_PARAMS |
– | Raw query string, e.g. settings-speed-select=1.25 |
CHANNEL_NAME / CHANNEL_NUMBER / CHANNEL_ID |
WeatherStar 4000 / 4000 / weatherstar4000 | |
FRAME_RATE |
15 |
The display is mostly static; 10–15 is plenty |
VIDEO_BITRATE |
2000k |
|
VIDEO_OPTIONS |
– | Replaces the x264 encoder args (hardware encoding) |
IDLE_STOP_SECONDS |
20 |
Stop encoding after the last viewer leaves |
RELOAD_MINUTES |
360 |
Periodic page reload; 0 disables |
PUBLIC_URL |
from request | Base URL written into the playlist |
CHROME_ARGS |
– | Extra Chromium flags (e.g. --proxy-server=...) |
Music
The app's own music player isn't captured. Put .mp3 files in the folder mounted at /music and restart the container; they loop as the channel's audio. ws4kp's royalty-free WeatherStar-style tracks are a good fit: the four in the ws4kp repo under server/music/default/, plus more in ws4kp-music. With no files, the stream carries a silent audio track (Jellyfin clients behave better with one).
Resources
Roughly 1 CPU core and ~600 MB RAM while streaming at 15 fps with software x264; much less when idle.
Troubleshooting
- Snapshot shows "The National Weather Service isn't responding": the app retries on its own; check the
ws4kpcontainer can reachapi.weather.gov. - Snapshot shows the location prompt: the location search failed. Set
LATITUDE/LONGITUDE, or use a permalink. - Channel spins/buffers in Jellyfin: try lowering
FRAME_RATEto 10, and confirmcurl http://<host>:9798/stream.ts -o x.tsfrom the Jellyfin host produces a growing file. - Logs:
docker logs -f weatherstar-tv