Skip to content

feat: French VF toggle (Frembed) + Live TV section (iptv-org)#119

Open
GuillaumeBld wants to merge 3 commits into
truelockmc:mainfrom
GuillaumeBld:feat/french-vf-and-livetv
Open

feat: French VF toggle (Frembed) + Live TV section (iptv-org)#119
GuillaumeBld wants to merge 3 commits into
truelockmc:mainfrom
GuillaumeBld:feat/french-vf-and-livetv

Conversation

@GuillaumeBld
Copy link
Copy Markdown

Summary

Two new features built on top of the existing player architecture:


1. French dubbed (VF) toggle via Frembed

A 🇫🇷 VF button appears in the player controls for all non-anime sources (MoviePage + TVPage).

  • Clicking switches the active source to Frembed — a French-dubbed (VF) embed API covering 24,000+ movies and 3,000+ series. The entire catalog is VF by design; no language parameter needed.
  • Button turns red while Frembed is active; clicking again restores the previous source
  • Previous source is saved to playerSourceBeforeFr in localStorage so switching back is exact
  • Hidden for AllManga (anime has its own Sub/Dub toggle)
  • sourceIsFrenchOnly() helper exported from api.js

Frembed URL format:

  • Movie: https://frembed.fun/api/film.php?id={TMDB_ID}
  • TV: https://frembed.fun/api/serie.php?id={TMDB_ID}&sa={SEASON}&epi={EPISODE}

2. Live TV section powered by iptv-org

A new Live TV page accessible via the sidebar (antenna icon).

Data source: iptv-org/api — 8,000+ channels, updated daily, no auth required. Fetches channels.json + streams.json + logos.json in parallel, joined in memory and cached to localStorage for 6 hours.

UI:

  • Channel grid with logos, quality badges, and geo-block / not-24/7 warnings
  • Country filter (defaults to FR), category filter (news, sports, movies, music…), search bar
  • Inline HLS player — click a channel to watch it in-page, close with ✕
  • NSFW and closed channels are filtered out

Files added:

  • src/utils/iptv.js — fetch + cache + join logic
  • src/pages/LiveTVPage.jsx — full page component
  • src/components/Icons.jsxLiveTVIcon added
  • src/components/Sidebar.jsx — Live TV nav item
  • src/styles/global.css — LiveTV + channel card styles

Test plan

  • Open a movie → player controls show 🇫🇷 VF button → clicking loads Frembed → button is red → clicking again restores previous source
  • Open a TV episode → same VF toggle behavior
  • Anime content (AllManga source) → VF button hidden, Sub/Dub still shows
  • Click Live TV in sidebar → page loads, channels appear (may take a few seconds on first load)
  • Filter by country FR → French channels only
  • Filter by category News → news channels only
  • Click a channel → inline player opens with stream
  • Close player → grid returns to full height

Guillaume added 3 commits June 1, 2026 01:08
Add Frembed (frembed.fun) as a new player source — a French-dubbed (VF)
embed API covering 24,000+ movies and 3,000+ series. The entire Frembed
catalog is VF by design; no language parameter needed.

Add a 🇫🇷 VF button to the player controls in MoviePage and TVPage:
- Clicking switches the active source to Frembed and saves the previous
  source so switching back restores it exactly
- Button turns red when Frembed is active
- Hidden for AllManga (anime sub/dub has its own toggle)
- Export sourceIsFrenchOnly() helper in api.js
Use screen.getPrimaryDisplay() to explicitly center the window after
did-finish-load. Combined with show:false on BrowserWindow creation and
app.disableHardwareAcceleration(), this fixes the black-window rendering
glitch on macOS multi-monitor setups where the secondary display has a
Metal compositor issue.
Integrate the iptv-org open-source IPTV database (8,000+ channels) as
a new Live TV section in Streambert.

- LiveTVPage: channel grid with inline HLS player, country/category
  filters, search, and geo-block/not-24h7 badges on cards
- iptv.js: fetches channels + streams + logos from iptv-org GitHub Pages
  API, joins them in memory, caches to localStorage for 6 hours
- Sidebar: new Live TV nav item with antenna icon
- Icons: add LiveTVIcon
- Styles: full LiveTV page + channel card CSS

Default country filter is FR (France). Channels are filtered to
non-NSFW and non-closed only. Logos use in_use=true entries from
the logos endpoint.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant