Bring Channels From Any External Source, In Minutes

Building a channel lineup from scratch is slow, and repeating the work every time you add a new upstream is painful. Stream Providers let you plug an external M3U or Xtream Codes feed into your panel and pull its channels into your catalog automatically — mapping remote categories to your own, cleaning up names, and keeping everything in sync in the background.

What Is a Stream Provider?

A provider is a subscription to an external source: another Xtream Codes panel, an M3U portal, or any URL that exposes a channel list. You register it once with the connection details, and the panel treats it as a reusable data source you can pull from anywhere in your setup.

Key Characteristics:

  • Works with the Xtream Codes API and M3U playlists (get.php, m3u_plus, portal URLs — all auto-parsed when you paste them).
  • Supports HTTP or HTTPS — click the pill next to the host field to switch scheme.
  • Includes a Test button that validates credentials and confirms the line is active before you save.
  • Reusable across multiple mirrors — one provider can feed several local categories at once.

By itself, a provider is just a connection. It doesn't import anything until you attach at least one mirror to it.

What Is a Mirror?

A mirror is the rule that tells the panel "copy category X of this provider into my local category Y". Providers hold the connection; mirrors decide what actually flows through.

Each mirror controls:

  • Which remote category to pull from (the panel fetches the list for you).
  • Which local category to write into.
  • A name prefix that gets prepended to every imported channel (e.g. [HD]) so you can tell providers apart at a glance.
  • Ignore keywords — channels whose remote name contains any of these words are skipped entirely. Great for filtering out adult content, test channels, or dead entries.
  • Strip keywords — words that are stripped from the channel name at import time. The channel is still imported; only its title gets cleaner. Use it to hide markers like 4K, HD or BACKUP that the provider leaves in the title.
  • Playback mode — how the imported channels keep their connection alive (see below).
  • Override channel logo — force the same logo URL on every channel this mirror creates.

Ignore drops the whole channel. Strip keeps the channel but cleans the name. If you're troubleshooting a "missing channel", the culprit is almost always Ignore, not Strip.

Playback Modes

Every mirror ships with one of three playback modes, chosen when you create it and switchable later at any time:

  • On-demand (default) — the panel opens the connection to the provider only when a client tunes in, and closes it as soon as the last viewer leaves. Frees up provider slots when nobody is watching. This is the right choice for most setups.
  • On-demand + Turbo — same on-demand behaviour, but with a pre-buffered upstream that makes channel switching noticeably faster. Uses our Rust-based Turbo processor instead of ffmpeg. Reach for this when clients complain about slow zapping.
  • Live (always on) — the connection stays open 24/7, whether or not anyone is watching. Consumes one provider line per channel at all times. Only worth using if your contract with the provider gives you unlimited or very large slot counts.

For a deeper breakdown of on-demand vs Turbo, see On Demand vs Turbo On Demand.

Choosing Live on a mirror with hundreds of channels can easily exhaust the concurrent-line quota of your provider. The wizard will warn you when this is likely.

How the Sync Works

Once a mirror is configured, the panel keeps it in sync automatically. Every tick (roughly every 15 seconds) it checks the provider for new channels, updates the ones that changed, and removes the ones that disappeared upstream.

You can also trigger a sync yourself with the Force Sync button. When it finishes, a toast confirms what happened:

Sync OK: +12 created, ~4 updated, -1 removed

Inside each mirror you'll see per-category status chips so you know exactly where you stand:

  • Connected — every remote channel is mapped and healthy.
  • Not connected — local channels that no longer have a mirror active.
  • Gone — channels that used to be there but the provider stopped listing.

Managing Imported Channels

The Imported Channels tab of a provider shows the full list of what it has pulled in — local name, local category, remote name and the Provider Stream ID (very handy when opening a support ticket with the upstream).

Imported channels behave like any other channel in your catalog: you can add them to bouquets, restream them, mark them as events, tie them to EPG sources, or edit them individually. The sync only rewrites the fields the mirror owns, so any manual edits you make on unrelated fields stick between sync cycles.

When you eventually delete a provider, you can choose whether its imported channels stay as orphans (useful if you're migrating to a different upstream) or get removed with it.

Best Practices

  • Assign a local category from the start. A mirror that lands channels with no local category leaves them invisible to your clients.
  • Filter with Ignore keywords; clean up with Strip keywords. Don't rely on Strip to drop unwanted channels — it won't.
  • Check the Gone chips regularly. They surface upstream removals fast, so you can react before a client notices a missing channel.
  • Keep Live mode for a handful of high-priority channels. For anything at scale, On-demand (with Turbo when needed) is safer for both your provider quota and your bandwidth.
  • Test before saving. Every credential change goes through the Test button first — it saves you from noticing a broken sync half an hour later.

Once a provider is running, all the standard Xtream AI tooling applies to what it brought in — from Stream Proxies to event channels — so you can layer resilience and features on top without touching the upstream at all.