diff --git a/.github/ISSUE_TEMPLATE/------channel-request.yml b/.github/ISSUE_TEMPLATE/------channel-request.yml
index 7e383a4748..0452b452d1 100644
--- a/.github/ISSUE_TEMPLATE/------channel-request.yml
+++ b/.github/ISSUE_TEMPLATE/------channel-request.yml
@@ -1,5 +1,6 @@
-name: \U0001F4FA Channel Request
+name: 📺 Channel Request
description: Request to add a channel into the playlist
+title: "Add: "
labels: [ "channel request" ]
body:
diff --git a/.github/ISSUE_TEMPLATE/-----broken-stream.yml b/.github/ISSUE_TEMPLATE/-----broken-stream.yml
new file mode 100644
index 0000000000..a532733d85
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/-----broken-stream.yml
@@ -0,0 +1,76 @@
+name: 🛠 Broken Stream
+description: Report a broken stream
+title: "Replace: "
+labels: [ "broken stream" ]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please fill out the issue template as much as you can so we could efficiently process your request
+ **IMPORTANT**: An issue may contain a request for only one channel, otherwise it will be closed
+
+ Channels present in this repository come from variety of sources, some may have overbalanced load at times, temporal issues or just be far away from your location to play smoothly.
+ Please wait for a few hours at least before filling this form.
+
+ - type: checkboxes
+ id: preliminary
+ attributes:
+ label: I have verified that
+ options:
+ - label: I use the GitHub playlist link and not a downloaded/cached version of the file
+ required: true
+ - label: My TV player has updated this playlist after 0:00 GMT and is set to update it daily
+ required: true
+ - label: I am aware that the channel source may have temporal outages. It is broken/absent from the playlist for couple of hours or days
+ required: true
+
+ - type: input
+ id: name
+ attributes:
+ label: Channel Name
+ description: Full name of the channel. Please use the exact name, as in how it appears in the playlist.
+ placeholder: 'Fox Life Russia'
+ validations:
+ required: true
+
+ - type: dropdown
+ id: reason
+ attributes:
+ label: What happened to the stream?
+ options:
+ - It is now offline (disappeared from the playlist)
+ - It is stuck at a single frame/the same segment
+ - I see visual artifacts
+ - It is buffering to unplayable point
+ validations:
+ required: true
+
+ - type: input
+ id: playlist
+ attributes:
+ label: Playlist
+ description: What playlist was used to get the channel from?
+ placeholder: 'ex. https://iptv-org.github.io/iptv/countries/au.m3u'
+ validations:
+ required: true
+
+ - type: input
+ id: link
+ attributes:
+ label: Broken Link
+ description: Please specify the broken link from a playlist if you can
+ placeholder: 'ex. https://lnc-kdfw-fox-aws.tubi.video/index.m3u8'
+
+ - type: input
+ id: alt
+ attributes:
+ label: Possible Replacement
+ description: If you know an alternate non-protected source or the way to fix current stream please let us know
+ placeholder: 'ex. https://lnc-kdfw-fox-aws.tubi.video/index.m3u8'
+
+ - type: input
+ id: notes
+ attributes:
+ label: Notes
+ placeholder: 'Anything else we should know?'
diff --git a/.github/ISSUE_TEMPLATE/-----bug-report.md b/.github/ISSUE_TEMPLATE/-----bug-report.md
deleted file mode 100644
index cb7b32fcd0..0000000000
--- a/.github/ISSUE_TEMPLATE/-----bug-report.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: '🐞 Bug Report'
-about: Report an error in this repository
-title: 'Fix: xxx'
-labels: bug
-assignees: ''
----
-
-
diff --git a/.github/ISSUE_TEMPLATE/----broken-stream.md b/.github/ISSUE_TEMPLATE/----broken-stream.md
deleted file mode 100644
index 3f4b0cff09..0000000000
--- a/.github/ISSUE_TEMPLATE/----broken-stream.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-name: '🛠 Broken Stream'
-about: Report a broken stream
-title: ''
-labels: broken stream
-assignees: ''
----
-
-
-
-
-
-**_Channel Name:_** xxx
-**_Country:_** xxx
-**_Broken Link (from playlist):_** xxx
-**_Possible Replacement (optional):_** xxx
-**_Notes (optional):_** xxx
diff --git a/.github/ISSUE_TEMPLATE/----bug-report.yml b/.github/ISSUE_TEMPLATE/----bug-report.yml
new file mode 100644
index 0000000000..accafd41fe
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/----bug-report.yml
@@ -0,0 +1,22 @@
+name: 🐞 Bug Report
+description: Report an error in this repository
+title: "Fix: "
+labels: [ "bug" ]
+assignees:
+ - freearhey
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ This form is **ONLY** intended for auto-update, channel sorting and other automation scripts related issues.
+ If you're experiencing problems viewing a channel, **this is not the right form**. Please fill a [Broken stream](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=-----broken-stream.yml&title=Fix%3A+) form instead.
+
+ Please describe the error in as much detail as possible so that we can fix it quickly.
+
+ - type: textarea
+ id: bug
+ attributes:
+ label: Describe your issue
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/--remove-channel.md b/.github/ISSUE_TEMPLATE/--remove-channel.md
deleted file mode 100644
index 6cc3a0a2b8..0000000000
--- a/.github/ISSUE_TEMPLATE/--remove-channel.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-name: "\U0001F6A8 Remove Channel"
-about: Request to remove a channel
-title: 'Remove: xxx'
-labels: DMCA
-assignees: ''
----
-
-
-
-**_Channel Name:_** xxx
-**_DMCA Notice (link):_** xxx
diff --git a/.github/ISSUE_TEMPLATE/--remove-channel.yml b/.github/ISSUE_TEMPLATE/--remove-channel.yml
new file mode 100644
index 0000000000..3495957012
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--remove-channel.yml
@@ -0,0 +1,34 @@
+name: 🚨 Remove Channel
+description: Request to remove a channel
+title: "Remove: "
+labels: [ "DMCA" ]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please fill out the issue template as much as you can so we could efficiently process your request
+
+ - type: input
+ id: name
+ attributes:
+ label: Channel Names
+ description: Full name of every channel to be removed
+ placeholder: 'Fox Life Russia'
+ validations:
+ required: true
+
+ - type: input
+ id: link
+ attributes:
+ label: DMCA Notice
+ description: A link to your published complaint form that must be filled here https://github.com/contact/dmca
+ placeholder: 'https://github.com/github/dmca/blob/3ce1c9402c6b7e46dcbbea6ff866d6a44e75c72a/2021/03/2021-03-26-sky-italia.md'
+ validations:
+ required: true
+
+ - type: input
+ id: notes
+ attributes:
+ label: Notes
+ placeholder: 'Anything else we should know?'
diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml
index dec1f3be64..49a504d1bf 100644
--- a/.github/workflows/auto-update.yml
+++ b/.github/workflows/auto-update.yml
@@ -4,279 +4,120 @@ on:
schedule:
- cron: '0 0,12 * * *'
jobs:
- create-branch:
+ setup:
runs-on: ubuntu-latest
- outputs:
- branch_name: ${{ steps.set-branch-name.outputs.branch_name }}
steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ github.ref }}
- - name: Set Branch Name
- id: set-branch-name
- run: echo "::set-output name=branch_name::$(date +'bot/auto-update-%Y%m%d%H%M00')"
- - name: Create Branch
- uses: peterjgrainger/action-create-branch@v2.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- branch: ${{ steps.set-branch-name.outputs.branch_name }}
- create-matrix:
- runs-on: ubuntu-latest
- needs: create-branch
- outputs:
- matrix: ${{ steps.set-matrix.outputs.matrix }}
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Create Matrix
- id: set-matrix
- run: node scripts/create-matrix.js
- format:
+ - run: npm install
+ - run: node scripts/commands/create-database.js
+ - run: node scripts/commands/create-matrix.js
+ id: create-matrix
+ - uses: actions/upload-artifact@v2
+ with:
+ name: database
+ path: scripts/channels.db
+ outputs:
+ matrix: ${{ steps.create-matrix.outputs.matrix }}
+ load:
runs-on: ubuntu-latest
- needs: [create-matrix, create-branch]
+ needs: setup
continue-on-error: true
strategy:
fail-fast: false
- matrix: ${{fromJSON(needs.create-matrix.outputs.matrix)}}
+ matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- - name: Checkout
- uses: actions/checkout@v2
+ - uses: actions/checkout@v2
+ - uses: actions/download-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup FFmpeg
- uses: FedericoCarboni/setup-ffmpeg@v1
- - name: Setup Node
- uses: actions/setup-node@v2
+ name: database
+ path: scripts
+ - uses: FedericoCarboni/setup-ffmpeg@v1
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Format Playlists
- run: node scripts/format.js --country=${{ matrix.country }} --debug
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
+ - run: npm install
+ - run: node scripts/commands/check-streams.js --cluster-id=${{ matrix.cluster_id }}
+ - uses: actions/upload-artifact@v2
with:
- name: channels
- path: channels/${{ matrix.country }}.m3u
- commit-changes:
+ name: logs
+ path: scripts/logs
+ update:
runs-on: ubuntu-latest
- needs: [format, create-branch]
+ needs: load
steps:
- - name: Checkout
- uses: actions/checkout@v2
+ - uses: actions/checkout@v2
+ - run: echo "::set-output name=branch_name::$(date +'bot/auto-update-%s')"
+ id: create-branch-name
+ - run: git config user.name 'iptv-bot[bot]'
+ - run: git config user.email '84861620+iptv-bot[bot]@users.noreply.github.com'
+ - run: git checkout -b ${{ steps.create-branch-name.outputs.branch_name }}
+ - run: curl -L -o scripts/data/codes.json https://iptv-org.github.io/epg/codes.json
+ - uses: actions/download-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Download Artifacts
- uses: actions/download-artifact@v2
+ name: database
+ path: scripts
+ - uses: actions/download-artifact@v2
with:
- name: channels
- path: channels
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Format playlists'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- remove-duplicates:
- runs-on: ubuntu-latest
- needs: [commit-changes, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
+ name: logs
+ path: scripts/logs
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Remove Duplicates
- run: node scripts/remove-duplicates.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
+ - run: npm install
+ - run: node scripts/commands/update-database.js
+ - uses: actions/upload-artifact@v2
with:
- commit_message: '[Bot] Remove duplicates'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- sort:
- runs-on: ubuntu-latest
- needs: [remove-duplicates, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
+ name: database
+ path: scripts/channels.db
+ - run: node scripts/commands/update-playlists.js
+ - run: git add channels/*
+ - run: git commit -m "[Bot] Update playlists"
+ - run: node scripts/commands/generate-playlists.js
+ - uses: actions/upload-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Sort Channels
- run: node scripts/sort.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Sort channels'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- filter:
- runs-on: ubuntu-latest
- needs: [sort, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Filter Playlists
- run: node scripts/filter.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Filter channels'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- generate:
- runs-on: ubuntu-latest
- needs: [filter, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Generate Playlists
- run: node scripts/generate.js
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: gh-pages
- path: .gh-pages/
- deploy:
- runs-on: ubuntu-latest
- needs: [generate, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Download Artifacts
- uses: actions/download-artifact@v2
- with:
- name: gh-pages
- path: .gh-pages
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
+ name: logs
+ path: scripts/logs
+ - run: node scripts/commands/update-readme.js
+ - run: git add README.md
+ - run: git commit -m "[Bot] Update README.md"
+ - run: git push -u origin ${{ steps.create-branch-name.outputs.branch_name }}
+ - uses: tibdex/github-app-token@v1
+ if: ${{ !env.ACT }}
+ id: create-app-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Deploy to GitHub Pages
- if: ${{ github.ref == 'refs/heads/master' }}
- uses: JamesIves/github-pages-deploy-action@4.1.1
+ - uses: repo-sync/pull-request@v2
+ if: ${{ !env.ACT }}
+ id: pull-request
with:
- branch: gh-pages
- folder: .gh-pages
- token: ${{ steps.generate-token.outputs.token }}
- git-config-name: iptv-bot
- git-config-email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit-message: '[Bot] Deploy to GitHub Pages'
- update-readme:
- runs-on: ubuntu-latest
- needs: [generate, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Update README.md
- run: node scripts/update-readme.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Update README.md'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: README.md
- pull-request:
- if: ${{ github.ref == 'refs/heads/master' }}
- needs: [update-readme, create-branch]
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
- with:
- app_id: ${{ secrets.APP_ID }}
- private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Create Pull Request
- id: pr
- uses: repo-sync/pull-request@v2
- with:
- source_branch: ${{ needs.create-branch.outputs.branch_name }}
+ github_token: ${{ steps.create-app-token.outputs.token }}
+ source_branch: ${{ steps.create-branch-name.outputs.branch_name }}
destination_branch: 'master'
- pr_title: '[Bot] Update playlists'
+ pr_title: '[Bot] Daily update'
pr_body: |
This pull request is created by [auto-update][1] workflow.
[1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}
- github_token: ${{ steps.generate-token.outputs.token }}
- - name: Merge Pull Request
- uses: juliangruber/merge-pull-request-action@v1
+ - uses: juliangruber/merge-pull-request-action@v1
+ if: ${{ github.ref == 'refs/heads/master' }}
with:
github-token: ${{ secrets.PAT }}
- number: ${{ steps.pr.outputs.pr_number }}
+ number: ${{ steps.pull-request.outputs.pr_number }}
method: squash
+ - uses: JamesIves/github-pages-deploy-action@4.1.1
+ if: ${{ github.ref == 'refs/heads/master' }}
+ with:
+ branch: gh-pages
+ folder: .gh-pages
+ token: ${{ steps.create-app-token.outputs.token }}
+ git-config-name: iptv-bot[bot]
+ git-config-email: 84861620+iptv-bot[bot]@users.noreply.github.com
+ commit-message: '[Bot] Generate playlists'
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index a557daedf1..6792edc057 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -4,12 +4,15 @@ on:
pull_request:
types: [opened, synchronize, reopened, edited]
jobs:
- lint:
+ check:
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v2
- - name: Install Dependencies
- run: npm install
- - name: Check Playlists
- run: npm run lint
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
+ with:
+ node-version: '14'
+ cache: 'npm'
+ - run: npm install
+ - run: npm run lint
+ - run: npm run validate
diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml
index a030d6bc67..ff86dc62ad 100644
--- a/.github/workflows/cleanup.yml
+++ b/.github/workflows/cleanup.yml
@@ -2,65 +2,38 @@ name: cleanup
on:
workflow_dispatch:
jobs:
- create-branch:
+ cleanup:
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ github.ref }}
- - name: Create Branch
- uses: peterjgrainger/action-create-branch@v2.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- branch: 'bot/cleanup'
- remove-broken-links:
- runs-on: ubuntu-latest
- needs: create-branch
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: bot/cleanup
- - name: Install Dependencies
- run: npm install
- - name: Remove Broken Links
- run: node scripts/remove-broken-links.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Remove broken links'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: bot/cleanup
- file_pattern: channels/*
- pull-request:
- if: ${{ github.ref == 'refs/heads/master' }}
- runs-on: ubuntu-latest
- needs: remove-broken-links
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: bot/cleanup
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
+ - uses: actions/checkout@v2
+ - run: echo "::set-output name=branch_name::$(date +'bot/cleanup-%s')"
+ id: create-branch-name
+ - run: |
+ git config user.name 'iptv-bot[bot]'
+ git config user.email '84861620+iptv-bot[bot]@users.noreply.github.com'
+ - run: git checkout -b ${{ steps.create-branch-name.outputs.branch_name }}
+ - run: npm install
+ - run: node scripts/commands/create-database.js
+ - run: node scripts/commands/cleanup-database.js
+ - run: node scripts/commands/update-playlists.js
+ - run: |
+ git add channels/*
+ git commit -m "[Bot] Update playlists"
+ - uses: tibdex/github-app-token@v1
+ if: ${{ !env.ACT }}
+ id: create-app-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Create Pull Request
- id: pr
- uses: repo-sync/pull-request@v2
+ - uses: repo-sync/pull-request@v2
+ if: ${{ github.ref == 'refs/heads/master' }}
+ id: pull-request
with:
- source_branch: 'bot/cleanup'
+ github_token: ${{ steps.create-app-token.outputs.token }}
+ source_branch: ${{ steps.create-branch-name.outputs.branch_name }}
destination_branch: 'master'
- pr_title: '[Bot] Cleaning playlists'
+ pr_title: '[Bot] Remove broken links'
pr_body: |
This pull request is created by [cleanup][1] workflow.
[1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}
- pr_draft: true
- github_token: ${{ steps.generate-token.outputs.token }}
diff --git a/.gitignore b/.gitignore
index b512c09d47..91905e1feb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,6 @@
-node_modules
\ No newline at end of file
+node_modules
+database
+.artifacts
+.secrets
+.actrc
+.DS_Store
\ No newline at end of file
diff --git a/.readme/.gitignore b/.readme/.gitignore
index 778ddef3ca..a2ac441348 100644
--- a/.readme/.gitignore
+++ b/.readme/.gitignore
@@ -1,3 +1,4 @@
_categories.md
_countries.md
-_languages.md
\ No newline at end of file
+_languages.md
+_regions.md
\ No newline at end of file
diff --git a/.readme/supported-region-codes.md b/.readme/supported-regions.md
similarity index 92%
rename from .readme/supported-region-codes.md
rename to .readme/supported-regions.md
index a575740c6d..0b0a9656c6 100644
--- a/.readme/supported-region-codes.md
+++ b/.readme/supported-regions.md
@@ -1,4 +1,4 @@
-## Supported Region Codes
+## Supported Regions
| Code | Description |
| ------------------------------------------------------------------------ | ---------------------------------- |
@@ -10,11 +10,11 @@
| [CARIB](https://en.wikipedia.org/wiki/Caribbean) | Caribbean |
| [CAS](https://en.wikipedia.org/wiki/Central_Asia) | Central Asia |
| [CIS](https://en.wikipedia.org/wiki/Commonwealth_of_Independent_States) | Commonwealth of Independent States |
-| [EMEA](https://en.wikipedia.org/wiki/Europe,_the_Middle_East_and_Africa) | Europe, Middle East and Africa |
+| [EMEA](https://en.wikipedia.org/wiki/Europe,_the_Middle_East_and_Africa) | Europe, the Middle East and Africa |
| [EUR](https://en.wikipedia.org/wiki/Europe) | Europe |
| [HISPAM](https://en.wikipedia.org/wiki/Hispanic_America) | Hispanic America |
| [LATAM](https://en.wikipedia.org/wiki/Latin_America) | Latin America |
-| [MAGHRIB](https://en.wikipedia.org/wiki/Maghreb) | Maghrib |
+| [MAGHREB](https://en.wikipedia.org/wiki/Maghreb) | Maghreb |
| [MENA](https://en.wikipedia.org/wiki/MENA) | Middle East and North Africa |
| [MIDEAST](https://en.wikipedia.org/wiki/Middle_East) | Middle East |
| [NORAM](https://en.wikipedia.org/wiki/North_America) | North America |
diff --git a/.readme/supported-statuses.md b/.readme/supported-statuses.md
new file mode 100644
index 0000000000..ec5f076065
--- /dev/null
+++ b/.readme/supported-statuses.md
@@ -0,0 +1,8 @@
+## Supported Statuses
+
+| Label | Description |
+| ----------- | ------------------------------------------------- |
+| Geo-blocked | Channel is only available in selected countries. |
+| Not 24/7 | Broadcast is not available 24 hours a day. |
+| Timeout | Server does not respond for more than 60 seconds. |
+| Offline | The broadcast does not work for any other reason. |
diff --git a/.readme/template.md b/.readme/template.md
index 43dce5682d..ba3185499e 100644
--- a/.readme/template.md
+++ b/.readme/template.md
@@ -14,9 +14,10 @@ To watch IPTV you just need to paste this link `https://iptv-org.github.io/iptv/
Also you can instead use one of these playlists:
-- `https://iptv-org.github.io/iptv/index.country.m3u` (grouped by country)
- `https://iptv-org.github.io/iptv/index.category.m3u` (grouped by category)
- `https://iptv-org.github.io/iptv/index.language.m3u` (grouped by language)
+- `https://iptv-org.github.io/iptv/index.country.m3u` (grouped by country)
+- `https://iptv-org.github.io/iptv/index.region.m3u` (grouped by region)
- `https://iptv-org.github.io/iptv/index.nsfw.m3u` (includes adult channels)
Or select one of the playlists from the list below.
@@ -43,6 +44,17 @@ Or select one of the playlists from the list below.
+### Playlists by region
+
+Expand
+
+
+
+#include "./.readme/_regions.md"
+
+
-
-
-
-
- Category Channels Playlist
- Auto 15 https://iptv-org.github.io/iptv/categories/auto.m3u
- Animation 30 https://iptv-org.github.io/iptv/categories/animation.m3u
- Business 42 https://iptv-org.github.io/iptv/categories/business.m3u
- Classic 64 https://iptv-org.github.io/iptv/categories/classic.m3u
- Comedy 54 https://iptv-org.github.io/iptv/categories/comedy.m3u
- Cooking 35 https://iptv-org.github.io/iptv/categories/cooking.m3u
- Culture 16 https://iptv-org.github.io/iptv/categories/culture.m3u
- Documentary 46 https://iptv-org.github.io/iptv/categories/documentary.m3u
- Education 25 https://iptv-org.github.io/iptv/categories/education.m3u
- Entertainment 209 https://iptv-org.github.io/iptv/categories/entertainment.m3u
- Family 31 https://iptv-org.github.io/iptv/categories/family.m3u
- General 365 https://iptv-org.github.io/iptv/categories/general.m3u
- Kids 185 https://iptv-org.github.io/iptv/categories/kids.m3u
- Legislative 64 https://iptv-org.github.io/iptv/categories/legislative.m3u
- Lifestyle 82 https://iptv-org.github.io/iptv/categories/lifestyle.m3u
- Local 808 https://iptv-org.github.io/iptv/categories/local.m3u
- Movies 263 https://iptv-org.github.io/iptv/categories/movies.m3u
- Music 397 https://iptv-org.github.io/iptv/categories/music.m3u
- News 431 https://iptv-org.github.io/iptv/categories/news.m3u
- Outdoor 31 https://iptv-org.github.io/iptv/categories/outdoor.m3u
- Relax 19 https://iptv-org.github.io/iptv/categories/relax.m3u
- Religious 305 https://iptv-org.github.io/iptv/categories/religious.m3u
- Series 219 https://iptv-org.github.io/iptv/categories/series.m3u
- Science 10 https://iptv-org.github.io/iptv/categories/science.m3u
- Shop 51 https://iptv-org.github.io/iptv/categories/shop.m3u
- Sports 212 https://iptv-org.github.io/iptv/categories/sports.m3u
- Travel 17 https://iptv-org.github.io/iptv/categories/travel.m3u
- Weather 9 https://iptv-org.github.io/iptv/categories/weather.m3u
- XXX 40 https://iptv-org.github.io/iptv/categories/xxx.m3u
-
+
+ Other 3743 https://iptv-org.github.io/iptv/categories/other.m3u
+
+
+ Category Channels Playlist
+ Animation 26 https://iptv-org.github.io/iptv/categories/animation.m3u
+ Auto 15 https://iptv-org.github.io/iptv/categories/auto.m3u
+ Business 37 https://iptv-org.github.io/iptv/categories/business.m3u
+ Classic 59 https://iptv-org.github.io/iptv/categories/classic.m3u
+ Comedy 53 https://iptv-org.github.io/iptv/categories/comedy.m3u
+ Cooking 33 https://iptv-org.github.io/iptv/categories/cooking.m3u
+ Culture 16 https://iptv-org.github.io/iptv/categories/culture.m3u
+ Documentary 45 https://iptv-org.github.io/iptv/categories/documentary.m3u
+ Education 22 https://iptv-org.github.io/iptv/categories/education.m3u
+ Entertainment 203 https://iptv-org.github.io/iptv/categories/entertainment.m3u
+ Family 32 https://iptv-org.github.io/iptv/categories/family.m3u
+ General 360 https://iptv-org.github.io/iptv/categories/general.m3u
+ Kids 162 https://iptv-org.github.io/iptv/categories/kids.m3u
+ Legislative 63 https://iptv-org.github.io/iptv/categories/legislative.m3u
+ Lifestyle 79 https://iptv-org.github.io/iptv/categories/lifestyle.m3u
+ Local 792 https://iptv-org.github.io/iptv/categories/local.m3u
+ Movies 246 https://iptv-org.github.io/iptv/categories/movies.m3u
+ Music 346 https://iptv-org.github.io/iptv/categories/music.m3u
+ News 414 https://iptv-org.github.io/iptv/categories/news.m3u
+ Outdoor 31 https://iptv-org.github.io/iptv/categories/outdoor.m3u
+ Relax 18 https://iptv-org.github.io/iptv/categories/relax.m3u
+ Religious 291 https://iptv-org.github.io/iptv/categories/religious.m3u
+ Science 11 https://iptv-org.github.io/iptv/categories/science.m3u
+ Series 196 https://iptv-org.github.io/iptv/categories/series.m3u
+ Shop 46 https://iptv-org.github.io/iptv/categories/shop.m3u
+ Sports 191 https://iptv-org.github.io/iptv/categories/sports.m3u
+ Travel 18 https://iptv-org.github.io/iptv/categories/travel.m3u
+ Weather 10 https://iptv-org.github.io/iptv/categories/weather.m3u
+ XXX 40 https://iptv-org.github.io/iptv/categories/xxx.m3u
+
Other 3634 https://iptv-org.github.io/iptv/categories/other.m3u
| Language | Channels | Playlist |
|---|---|---|
| Akan | 2 | https://iptv-org.github.io/iptv/languages/aka.m3u |
| Albanian | 48 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
| Amharic | 1 | https://iptv-org.github.io/iptv/languages/amh.m3u |
| Arabic | 406 | https://iptv-org.github.io/iptv/languages/ara.m3u |
| Armenian | 28 | https://iptv-org.github.io/iptv/languages/hye.m3u |
| Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
| Azerbaijani | 26 | https://iptv-org.github.io/iptv/languages/aze.m3u |
| Bashkir | 3 | https://iptv-org.github.io/iptv/languages/bak.m3u |
| Belarusian | 1 | https://iptv-org.github.io/iptv/languages/bel.m3u |
| Bengali | 40 | https://iptv-org.github.io/iptv/languages/ben.m3u |
| Bhojpuri | 4 | https://iptv-org.github.io/iptv/languages/bho.m3u |
| Bosnian | 11 | https://iptv-org.github.io/iptv/languages/bos.m3u |
| Bulgarian | 10 | https://iptv-org.github.io/iptv/languages/bul.m3u |
| Burmese | 0 | https://iptv-org.github.io/iptv/languages/mya.m3u |
| Catalan | 9 | https://iptv-org.github.io/iptv/languages/cat.m3u |
| Chinese | 808 | https://iptv-org.github.io/iptv/languages/zho.m3u |
| Croatian | 12 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
| Czech | 22 | https://iptv-org.github.io/iptv/languages/ces.m3u |
| Danish | 8 | https://iptv-org.github.io/iptv/languages/dan.m3u |
| Dhivehi | 1 | https://iptv-org.github.io/iptv/languages/div.m3u |
| Dutch | 104 | https://iptv-org.github.io/iptv/languages/nld.m3u |
| English | 2161 | https://iptv-org.github.io/iptv/languages/eng.m3u |
| Estonian | 6 | https://iptv-org.github.io/iptv/languages/est.m3u |
| Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
| Finnish | 8 | https://iptv-org.github.io/iptv/languages/fin.m3u |
| French | 228 | https://iptv-org.github.io/iptv/languages/fra.m3u |
| Galician | 7 | https://iptv-org.github.io/iptv/languages/glg.m3u |
| Georgian | 9 | https://iptv-org.github.io/iptv/languages/kat.m3u |
| German | 232 | https://iptv-org.github.io/iptv/languages/deu.m3u |
| Greek | 106 | https://iptv-org.github.io/iptv/languages/ell.m3u |
| Greenlandic | 2 | https://iptv-org.github.io/iptv/languages/kal.m3u |
| Hebrew | 17 | https://iptv-org.github.io/iptv/languages/heb.m3u |
| Hindi | 178 | https://iptv-org.github.io/iptv/languages/hin.m3u |
| Hungarian | 30 | https://iptv-org.github.io/iptv/languages/hun.m3u |
| Icelandic | 1 | https://iptv-org.github.io/iptv/languages/isl.m3u |
| Indonesian | 70 | https://iptv-org.github.io/iptv/languages/ind.m3u |
| Inuktitut | 1 | https://iptv-org.github.io/iptv/languages/iku.m3u |
| Italian | 212 | https://iptv-org.github.io/iptv/languages/ita.m3u |
| Japanese | 51 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
| Javanese | 4 | https://iptv-org.github.io/iptv/languages/jav.m3u |
| Kannada | 8 | https://iptv-org.github.io/iptv/languages/kan.m3u |
| Kazakh | 16 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
| Khmer | 8 | https://iptv-org.github.io/iptv/languages/khm.m3u |
| Kinyarwanda | 2 | https://iptv-org.github.io/iptv/languages/kin.m3u |
| Korean | 60 | https://iptv-org.github.io/iptv/languages/kor.m3u |
| Kurdish | 26 | https://iptv-org.github.io/iptv/languages/kur.m3u |
| Kyrgyz | 1 | https://iptv-org.github.io/iptv/languages/kir.m3u |
| Lao | 3 | https://iptv-org.github.io/iptv/languages/lao.m3u |
| Latvian | 4 | https://iptv-org.github.io/iptv/languages/lav.m3u |
| Lithuanian | 4 | https://iptv-org.github.io/iptv/languages/lit.m3u |
| Luxembourgish | 2 | https://iptv-org.github.io/iptv/languages/ltz.m3u |
| Macedonian | 2 | https://iptv-org.github.io/iptv/languages/mkd.m3u |
| Malay | 21 | https://iptv-org.github.io/iptv/languages/msa.m3u |
| Malayalam | 54 | https://iptv-org.github.io/iptv/languages/mal.m3u |
| Maltese | 3 | https://iptv-org.github.io/iptv/languages/mlt.m3u |
| Mandarin Chinese | 52 | https://iptv-org.github.io/iptv/languages/cmn.m3u |
| Mandinka | 1 | https://iptv-org.github.io/iptv/languages/mnk.m3u |
| Maori | 2 | https://iptv-org.github.io/iptv/languages/mri.m3u |
| Marathi | 4 | https://iptv-org.github.io/iptv/languages/mar.m3u |
| Min Nan Chinese | 3 | https://iptv-org.github.io/iptv/languages/nan.m3u |
| Mongolian | 0 | https://iptv-org.github.io/iptv/languages/mon.m3u |
| Montenegrin | 1 | https://iptv-org.github.io/iptv/languages/cnr.m3u |
| Nepali | 1 | https://iptv-org.github.io/iptv/languages/nep.m3u |
| Norwegian | 6 | https://iptv-org.github.io/iptv/languages/nor.m3u |
| Norwegian Bokmål | 4 | https://iptv-org.github.io/iptv/languages/nob.m3u |
| Papiamento | 2 | https://iptv-org.github.io/iptv/languages/pap.m3u |
| Pashto | 23 | https://iptv-org.github.io/iptv/languages/pus.m3u |
| Persian | 174 | https://iptv-org.github.io/iptv/languages/fas.m3u |
| Polish | 38 | https://iptv-org.github.io/iptv/languages/pol.m3u |
| Portuguese | 231 | https://iptv-org.github.io/iptv/languages/por.m3u |
| Punjabi | 8 | https://iptv-org.github.io/iptv/languages/pan.m3u |
| Romanian | 55 | https://iptv-org.github.io/iptv/languages/ron.m3u |
| Russian | 362 | https://iptv-org.github.io/iptv/languages/rus.m3u |
| Serbian | 30 | https://iptv-org.github.io/iptv/languages/srp.m3u |
| Sinhala | 8 | https://iptv-org.github.io/iptv/languages/sin.m3u |
| Slovak | 24 | https://iptv-org.github.io/iptv/languages/slk.m3u |
| Slovenian | 9 | https://iptv-org.github.io/iptv/languages/slv.m3u |
| Somali | 5 | https://iptv-org.github.io/iptv/languages/som.m3u |
| Spanish | 1061 | https://iptv-org.github.io/iptv/languages/spa.m3u |
| Sundanese | 1 | https://iptv-org.github.io/iptv/languages/sun.m3u |
| Swahili | 1 | https://iptv-org.github.io/iptv/languages/swa.m3u |
| Swedish | 13 | https://iptv-org.github.io/iptv/languages/swe.m3u |
| Tagalog | 7 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
| Tamil | 43 | https://iptv-org.github.io/iptv/languages/tam.m3u |
| Telugu | 4 | https://iptv-org.github.io/iptv/languages/tel.m3u |
| Thai | 48 | https://iptv-org.github.io/iptv/languages/tha.m3u |
| Turkish | 165 | https://iptv-org.github.io/iptv/languages/tur.m3u |
| Turkmen | 7 | https://iptv-org.github.io/iptv/languages/tuk.m3u |
| Ukrainian | 89 | https://iptv-org.github.io/iptv/languages/ukr.m3u |
| Urdu | 21 | https://iptv-org.github.io/iptv/languages/urd.m3u |
| Uzbek | 1 | https://iptv-org.github.io/iptv/languages/uzb.m3u |
| Vietnamese | 99 | https://iptv-org.github.io/iptv/languages/vie.m3u |
| Western Frisian | 1 | https://iptv-org.github.io/iptv/languages/fry.m3u |
| Wolof | 15 | https://iptv-org.github.io/iptv/languages/wol.m3u |
| Yue Chinese | 5 | https://iptv-org.github.io/iptv/languages/yue.m3u |
| Undefined | 218 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
| Language | Channels | Playlist |
| Akan | 2 | https://iptv-org.github.io/iptv/languages/aka.m3u |
| Albanian | 120 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
| Amharic | 1 | https://iptv-org.github.io/iptv/languages/amh.m3u |
| Arabic | 384 | https://iptv-org.github.io/iptv/languages/ara.m3u |
| Armenian | 26 | https://iptv-org.github.io/iptv/languages/hye.m3u |
| Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
| Azerbaijani | 25 | https://iptv-org.github.io/iptv/languages/aze.m3u |
| Bashkir | 3 | https://iptv-org.github.io/iptv/languages/bak.m3u |
| Belarusian | 1 | https://iptv-org.github.io/iptv/languages/bel.m3u |
| Bengali | 39 | https://iptv-org.github.io/iptv/languages/ben.m3u |
| Bhojpuri | 4 | https://iptv-org.github.io/iptv/languages/bho.m3u |
| Bosnian | 12 | https://iptv-org.github.io/iptv/languages/bos.m3u |
| Bulgarian | 9 | https://iptv-org.github.io/iptv/languages/bul.m3u |
| Burmese | 0 | https://iptv-org.github.io/iptv/languages/mya.m3u |
| Catalan | 8 | https://iptv-org.github.io/iptv/languages/cat.m3u |
| Chinese | 778 | https://iptv-org.github.io/iptv/languages/zho.m3u |
| Croatian | 12 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
| Czech | 19 | https://iptv-org.github.io/iptv/languages/ces.m3u |
| Danish | 8 | https://iptv-org.github.io/iptv/languages/dan.m3u |
| Dhivehi | 1 | https://iptv-org.github.io/iptv/languages/div.m3u |
| Dutch | 103 | https://iptv-org.github.io/iptv/languages/nld.m3u |
| English | 2089 | https://iptv-org.github.io/iptv/languages/eng.m3u |
| Estonian | 6 | https://iptv-org.github.io/iptv/languages/est.m3u |
| Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
| Finnish | 6 | https://iptv-org.github.io/iptv/languages/fin.m3u |
| French | 216 | https://iptv-org.github.io/iptv/languages/fra.m3u |
| Galician | 7 | https://iptv-org.github.io/iptv/languages/glg.m3u |
| Georgian | 8 | https://iptv-org.github.io/iptv/languages/kat.m3u |
| German | 223 | https://iptv-org.github.io/iptv/languages/deu.m3u |
| Greek | 101 | https://iptv-org.github.io/iptv/languages/ell.m3u |
| Greenlandic | 2 | https://iptv-org.github.io/iptv/languages/kal.m3u |
| Hebrew | 16 | https://iptv-org.github.io/iptv/languages/heb.m3u |
| Hindi | 181 | https://iptv-org.github.io/iptv/languages/hin.m3u |
| Hungarian | 30 | https://iptv-org.github.io/iptv/languages/hun.m3u |
| Icelandic | 1 | https://iptv-org.github.io/iptv/languages/isl.m3u |
| Indonesian | 73 | https://iptv-org.github.io/iptv/languages/ind.m3u |
| Inuktitut | 1 | https://iptv-org.github.io/iptv/languages/iku.m3u |
| Italian | 195 | https://iptv-org.github.io/iptv/languages/ita.m3u |
| Japanese | 50 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
| Javanese | 4 | https://iptv-org.github.io/iptv/languages/jav.m3u |
| Kannada | 8 | https://iptv-org.github.io/iptv/languages/kan.m3u |
| Kazakh | 15 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
| Khmer | 8 | https://iptv-org.github.io/iptv/languages/khm.m3u |
| Kinyarwanda | 2 | https://iptv-org.github.io/iptv/languages/kin.m3u |
| Korean | 54 | https://iptv-org.github.io/iptv/languages/kor.m3u |
| Kurdish | 25 | https://iptv-org.github.io/iptv/languages/kur.m3u |
| Kyrgyz | 1 | https://iptv-org.github.io/iptv/languages/kir.m3u |
| Lao | 3 | https://iptv-org.github.io/iptv/languages/lao.m3u |
| Latvian | 4 | https://iptv-org.github.io/iptv/languages/lav.m3u |
| Lithuanian | 4 | https://iptv-org.github.io/iptv/languages/lit.m3u |
| Luxembourgish | 2 | https://iptv-org.github.io/iptv/languages/ltz.m3u |
| Macedonian | 1 | https://iptv-org.github.io/iptv/languages/mkd.m3u |
| Malay | 20 | https://iptv-org.github.io/iptv/languages/msa.m3u |
| Malayalam | 54 | https://iptv-org.github.io/iptv/languages/mal.m3u |
| Maltese | 3 | https://iptv-org.github.io/iptv/languages/mlt.m3u |
| Mandarin Chinese | 54 | https://iptv-org.github.io/iptv/languages/cmn.m3u |
| Mandinka | 1 | https://iptv-org.github.io/iptv/languages/mnk.m3u |
| Maori | 2 | https://iptv-org.github.io/iptv/languages/mri.m3u |
| Marathi | 4 | https://iptv-org.github.io/iptv/languages/mar.m3u |
| Min Nan Chinese | 3 | https://iptv-org.github.io/iptv/languages/nan.m3u |
| Mongolian | 0 | https://iptv-org.github.io/iptv/languages/mon.m3u |
| Montenegrin | 1 | https://iptv-org.github.io/iptv/languages/cnr.m3u |
| Nepali | 1 | https://iptv-org.github.io/iptv/languages/nep.m3u |
| Norwegian | 6 | https://iptv-org.github.io/iptv/languages/nor.m3u |
| Norwegian Bokmål | 4 | https://iptv-org.github.io/iptv/languages/nob.m3u |
| Panjabi | 2 | https://iptv-org.github.io/iptv/languages/pan.m3u |
| Papiamento | 2 | https://iptv-org.github.io/iptv/languages/pap.m3u |
| Pashto | 22 | https://iptv-org.github.io/iptv/languages/pus.m3u |
| Persian | 167 | https://iptv-org.github.io/iptv/languages/fas.m3u |
| Polish | 34 | https://iptv-org.github.io/iptv/languages/pol.m3u |
| Portuguese | 226 | https://iptv-org.github.io/iptv/languages/por.m3u |
| Romanian | 57 | https://iptv-org.github.io/iptv/languages/ron.m3u |
| Russian | 349 | https://iptv-org.github.io/iptv/languages/rus.m3u |
| Serbian | 27 | https://iptv-org.github.io/iptv/languages/srp.m3u |
| Sinhala | 9 | https://iptv-org.github.io/iptv/languages/sin.m3u |
| Slovak | 20 | https://iptv-org.github.io/iptv/languages/slk.m3u |
| Slovenian | 9 | https://iptv-org.github.io/iptv/languages/slv.m3u |
| Somali | 4 | https://iptv-org.github.io/iptv/languages/som.m3u |
| Spanish | 1005 | https://iptv-org.github.io/iptv/languages/spa.m3u |
| Sundanese | 1 | https://iptv-org.github.io/iptv/languages/sun.m3u |
| Swahili | 1 | https://iptv-org.github.io/iptv/languages/swa.m3u |
| Swedish | 11 | https://iptv-org.github.io/iptv/languages/swe.m3u |
| Tagalog | 7 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
| Tamil | 43 | https://iptv-org.github.io/iptv/languages/tam.m3u |
| Telugu | 4 | https://iptv-org.github.io/iptv/languages/tel.m3u |
| Thai | 46 | https://iptv-org.github.io/iptv/languages/tha.m3u |
| Turkish | 159 | https://iptv-org.github.io/iptv/languages/tur.m3u |
| Turkmen | 7 | https://iptv-org.github.io/iptv/languages/tuk.m3u |
| Ukrainian | 90 | https://iptv-org.github.io/iptv/languages/ukr.m3u |
| Urdu | 21 | https://iptv-org.github.io/iptv/languages/urd.m3u |
| Uzbek | 1 | https://iptv-org.github.io/iptv/languages/uzb.m3u |
| Vietnamese | 71 | https://iptv-org.github.io/iptv/languages/vie.m3u |
| Western Frisian | 1 | https://iptv-org.github.io/iptv/languages/fry.m3u |
| Wolof | 15 | https://iptv-org.github.io/iptv/languages/wol.m3u |
| Yue Chinese | 6 | https://iptv-org.github.io/iptv/languages/yue.m3u |
| Undefined | 210 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
| Region | Channels | Playlist |
|---|---|---|
| Africa | 200 | https://iptv-org.github.io/iptv/regions/afr.m3u |
| Americas | 2816 | https://iptv-org.github.io/iptv/regions/amer.m3u |
| Arab world | 382 | https://iptv-org.github.io/iptv/regions/arab.m3u |
| Asia | 2519 | https://iptv-org.github.io/iptv/regions/asia.m3u |
| Asia-Pacific | 1560 | https://iptv-org.github.io/iptv/regions/apac.m3u |
| Caribbean | 131 | https://iptv-org.github.io/iptv/regions/carib.m3u |
| Central Asia | 37 | https://iptv-org.github.io/iptv/regions/cas.m3u |
| Commonwealth of Independent States | 409 | https://iptv-org.github.io/iptv/regions/cis.m3u |
| Europe | 2236 | https://iptv-org.github.io/iptv/regions/eur.m3u |
| Europe, the Middle East and Africa | 2850 | https://iptv-org.github.io/iptv/regions/emea.m3u |
| Hispanic America | 664 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
| Latin America | 869 | https://iptv-org.github.io/iptv/regions/latam.m3u |
| Maghreb | 93 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
| Middle East | 690 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
| Middle East and North Africa | 548 | https://iptv-org.github.io/iptv/regions/mena.m3u |
| Nordics | 44 | https://iptv-org.github.io/iptv/regions/nord.m3u |
| North America | 2215 | https://iptv-org.github.io/iptv/regions/noram.m3u |
| Oceania | 77 | https://iptv-org.github.io/iptv/regions/oce.m3u |
| South Asia | 381 | https://iptv-org.github.io/iptv/regions/sas.m3u |
| Sub-Saharan Africa | 114 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
| West Africa | 71 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
| Undefined | 272 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
| Country | Channels | Playlist |
|---|---|---|
| 🇦🇫 Afghanistan | 28 | https://iptv-org.github.io/iptv/countries/af.m3u |
| 🇦🇱 Albania | 50 | https://iptv-org.github.io/iptv/countries/al.m3u |
| 🇩🇿 Algeria | 66 | https://iptv-org.github.io/iptv/countries/dz.m3u |
| 🇦🇸 American Samoa | 2 | https://iptv-org.github.io/iptv/countries/as.m3u |
| 🇦🇩 Andorra | 11 | https://iptv-org.github.io/iptv/countries/ad.m3u |
| 🇦🇴 Angola | 3 | https://iptv-org.github.io/iptv/countries/ao.m3u |
| 🇦🇬 Antigua & Barbuda | 1 | https://iptv-org.github.io/iptv/countries/ag.m3u |
| 🇦🇷 Argentina | 102 | https://iptv-org.github.io/iptv/countries/ar.m3u |
| 🇦🇲 Armenia | 37 | https://iptv-org.github.io/iptv/countries/am.m3u |
| 🇦🇼 Aruba | 3 | https://iptv-org.github.io/iptv/countries/aw.m3u |
| 🇦🇺 Australia | 71 | https://iptv-org.github.io/iptv/countries/au.m3u |
| 🇦🇹 Austria | 29 | https://iptv-org.github.io/iptv/countries/at.m3u |
| 🇦🇿 Azerbaijan | 36 | https://iptv-org.github.io/iptv/countries/az.m3u |
| 🇧🇸 Bahamas | 3 | https://iptv-org.github.io/iptv/countries/bs.m3u |
| 🇧🇭 Bahrain | 49 | https://iptv-org.github.io/iptv/countries/bh.m3u |
| 🇧🇩 Bangladesh | 38 | https://iptv-org.github.io/iptv/countries/bd.m3u |
| 🇧🇧 Barbados | 1 | https://iptv-org.github.io/iptv/countries/bb.m3u |
| 🇧🇾 Belarus | 29 | https://iptv-org.github.io/iptv/countries/by.m3u |
| 🇧🇪 Belgium | 31 | https://iptv-org.github.io/iptv/countries/be.m3u |
| 🇧🇯 Benin | 5 | https://iptv-org.github.io/iptv/countries/bj.m3u |
| 🇧🇹 Bhutan | 10 | https://iptv-org.github.io/iptv/countries/bt.m3u |
| 🇧🇴 Bolivia | 56 | https://iptv-org.github.io/iptv/countries/bo.m3u |
| 🇧🇦 Bosnia | 17 | https://iptv-org.github.io/iptv/countries/ba.m3u |
| 🇧🇼 Botswana | 1 | https://iptv-org.github.io/iptv/countries/bw.m3u |
| 🇧🇷 Brazil | 192 | https://iptv-org.github.io/iptv/countries/br.m3u |
| 🇧🇳 Brunei | 7 | https://iptv-org.github.io/iptv/countries/bn.m3u |
| 🇧🇬 Bulgaria | 16 | https://iptv-org.github.io/iptv/countries/bg.m3u |
| 🇧🇫 Burkina Faso | 5 | https://iptv-org.github.io/iptv/countries/bf.m3u |
| 🇧🇮 Burundi | 1 | https://iptv-org.github.io/iptv/countries/bi.m3u |
| 🇰🇭 Cambodia | 14 | https://iptv-org.github.io/iptv/countries/kh.m3u |
| 🇨🇲 Cameroon | 5 | https://iptv-org.github.io/iptv/countries/cm.m3u |
| 🇨🇦 Canada | 141 | https://iptv-org.github.io/iptv/countries/ca.m3u |
| 🇨🇻 Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
| 🇨🇫 Central African Republic | 1 | https://iptv-org.github.io/iptv/countries/cf.m3u |
| 🇹🇩 Chad | 1 | https://iptv-org.github.io/iptv/countries/td.m3u |
| 🇨🇱 Chile | 105 | https://iptv-org.github.io/iptv/countries/cl.m3u |
| 🇨🇳 China | 730 | https://iptv-org.github.io/iptv/countries/cn.m3u |
| 🇨🇴 Colombia | 77 | https://iptv-org.github.io/iptv/countries/co.m3u |
| 🇰🇲 Comoros | 40 | https://iptv-org.github.io/iptv/countries/km.m3u |
| 🇨🇬 Congo - Brazzaville | 3 | https://iptv-org.github.io/iptv/countries/cg.m3u |
| 🇨🇩 Congo - Kinshasa | 4 | https://iptv-org.github.io/iptv/countries/cd.m3u |
| 🇨🇰 Cook Islands | 2 | https://iptv-org.github.io/iptv/countries/ck.m3u |
| 🇨🇷 Costa Rica | 70 | https://iptv-org.github.io/iptv/countries/cr.m3u |
| 🇨🇮 Côte d’Ivoire | 2 | https://iptv-org.github.io/iptv/countries/ci.m3u |
| 🇭🇷 Croatia | 19 | https://iptv-org.github.io/iptv/countries/hr.m3u |
| 🇨🇺 Cuba | 40 | https://iptv-org.github.io/iptv/countries/cu.m3u |
| 🇨🇼 Curaçao | 5 | https://iptv-org.github.io/iptv/countries/cw.m3u |
| 🇨🇾 Cyprus | 26 | https://iptv-org.github.io/iptv/countries/cy.m3u |
| 🇨🇿 Czechia | 29 | https://iptv-org.github.io/iptv/countries/cz.m3u |
| 🇩🇰 Denmark | 13 | https://iptv-org.github.io/iptv/countries/dk.m3u |
| 🇩🇯 Djibouti | 42 | https://iptv-org.github.io/iptv/countries/dj.m3u |
| 🇩🇴 Dominican Republic | 100 | https://iptv-org.github.io/iptv/countries/do.m3u |
| 🇪🇨 Ecuador | 63 | https://iptv-org.github.io/iptv/countries/ec.m3u |
| 🇪🇬 Egypt | 82 | https://iptv-org.github.io/iptv/countries/eg.m3u |
| 🇸🇻 El Salvador | 51 | https://iptv-org.github.io/iptv/countries/sv.m3u |
| 🇬🇶 Equatorial Guinea | 2 | https://iptv-org.github.io/iptv/countries/gq.m3u |
| 🇪🇷 Eritrea | 1 | https://iptv-org.github.io/iptv/countries/er.m3u |
| 🇪🇪 Estonia | 12 | https://iptv-org.github.io/iptv/countries/ee.m3u |
| 🇸🇿 Eswatini | 1 | https://iptv-org.github.io/iptv/countries/sz.m3u |
| 🇪🇹 Ethiopia | 2 | https://iptv-org.github.io/iptv/countries/et.m3u |
| 🇫🇴 Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
| 🇫🇯 Fiji | 3 | https://iptv-org.github.io/iptv/countries/fj.m3u |
| 🇫🇮 Finland | 13 | https://iptv-org.github.io/iptv/countries/fi.m3u |
| 🇫🇷 France | 158 | https://iptv-org.github.io/iptv/countries/fr.m3u |
| 🇵🇫 French Polynesia | 3 | https://iptv-org.github.io/iptv/countries/pf.m3u |
| 🇹🇫 French Southern Territories | 1 | https://iptv-org.github.io/iptv/countries/tf.m3u |
| 🇬🇦 Gabon | 1 | https://iptv-org.github.io/iptv/countries/ga.m3u |
| 🇬🇲 Gambia | 2 | https://iptv-org.github.io/iptv/countries/gm.m3u |
| 🇬🇪 Georgia | 20 | https://iptv-org.github.io/iptv/countries/ge.m3u |
| 🇩🇪 Germany | 193 | https://iptv-org.github.io/iptv/countries/de.m3u |
| 🇬🇭 Ghana | 3 | https://iptv-org.github.io/iptv/countries/gh.m3u |
| 🇬🇷 Greece | 98 | https://iptv-org.github.io/iptv/countries/gr.m3u |
| 🇬🇱 Greenland | 2 | https://iptv-org.github.io/iptv/countries/gl.m3u |
| 🇬🇵 Guadeloupe | 1 | https://iptv-org.github.io/iptv/countries/gp.m3u |
| 🇬🇺 Guam | 2 | https://iptv-org.github.io/iptv/countries/gu.m3u |
| 🇬🇹 Guatemala | 44 | https://iptv-org.github.io/iptv/countries/gt.m3u |
| 🇬🇳 Guinea | 2 | https://iptv-org.github.io/iptv/countries/gn.m3u |
| 🇬🇼 Guinea-Bissau | 1 | https://iptv-org.github.io/iptv/countries/gw.m3u |
| 🇭🇹 Haiti | 14 | https://iptv-org.github.io/iptv/countries/ht.m3u |
| 🇭🇳 Honduras | 57 | https://iptv-org.github.io/iptv/countries/hn.m3u |
| 🇭🇰 Hong Kong | 13 | https://iptv-org.github.io/iptv/countries/hk.m3u |
| 🇭🇺 Hungary | 35 | https://iptv-org.github.io/iptv/countries/hu.m3u |
| 🇮🇸 Iceland | 7 | https://iptv-org.github.io/iptv/countries/is.m3u |
| 🇮🇳 India | 316 | https://iptv-org.github.io/iptv/countries/in.m3u |
| 🇮🇩 Indonesia | 78 | https://iptv-org.github.io/iptv/countries/id.m3u |
| 🌍 International | 36 | https://iptv-org.github.io/iptv/countries/int.m3u |
| 🇮🇷 Iran | 185 | https://iptv-org.github.io/iptv/countries/ir.m3u |
| 🇮🇶 Iraq | 96 | https://iptv-org.github.io/iptv/countries/iq.m3u |
| 🇮🇪 Ireland | 16 | https://iptv-org.github.io/iptv/countries/ie.m3u |
| 🇮🇱 Israel | 24 | https://iptv-org.github.io/iptv/countries/il.m3u |
| 🇮🇹 Italy | 218 | https://iptv-org.github.io/iptv/countries/it.m3u |
| 🇯🇲 Jamaica | 1 | https://iptv-org.github.io/iptv/countries/jm.m3u |
| 🇯🇵 Japan | 59 | https://iptv-org.github.io/iptv/countries/jp.m3u |
| 🇯🇴 Jordan | 66 | https://iptv-org.github.io/iptv/countries/jo.m3u |
| 🇰🇿 Kazakhstan | 26 | https://iptv-org.github.io/iptv/countries/kz.m3u |
| 🇰🇪 Kenya | 14 | https://iptv-org.github.io/iptv/countries/ke.m3u |
| 🇰🇮 Kiribati | 2 | https://iptv-org.github.io/iptv/countries/ki.m3u |
| 🇽🇰 Kosovo | 4 | https://iptv-org.github.io/iptv/countries/xk.m3u |
| 🇰🇼 Kuwait | 66 | https://iptv-org.github.io/iptv/countries/kw.m3u |
| 🇰🇬 Kyrgyzstan | 7 | https://iptv-org.github.io/iptv/countries/kg.m3u |
| 🇱🇦 Laos | 37 | https://iptv-org.github.io/iptv/countries/la.m3u |
| 🇱🇻 Latvia | 10 | https://iptv-org.github.io/iptv/countries/lv.m3u |
| 🇱🇧 Lebanon | 69 | https://iptv-org.github.io/iptv/countries/lb.m3u |
| 🇱🇸 Lesotho | 1 | https://iptv-org.github.io/iptv/countries/ls.m3u |
| 🇱🇷 Liberia | 1 | https://iptv-org.github.io/iptv/countries/lr.m3u |
| 🇱🇾 Libya | 50 | https://iptv-org.github.io/iptv/countries/ly.m3u |
| 🇱🇮 Liechtenstein | 8 | https://iptv-org.github.io/iptv/countries/li.m3u |
| 🇱🇹 Lithuania | 10 | https://iptv-org.github.io/iptv/countries/lt.m3u |
| 🇱🇺 Luxembourg | 16 | https://iptv-org.github.io/iptv/countries/lu.m3u |
| 🇲🇴 Macao | 11 | https://iptv-org.github.io/iptv/countries/mo.m3u |
| 🇲🇬 Madagascar | 1 | https://iptv-org.github.io/iptv/countries/mg.m3u |
| 🇲🇼 Malawi | 1 | https://iptv-org.github.io/iptv/countries/mw.m3u |
| 🇲🇾 Malaysia | 29 | https://iptv-org.github.io/iptv/countries/my.m3u |
| 🇲🇻 Maldives | 11 | https://iptv-org.github.io/iptv/countries/mv.m3u |
| 🇲🇱 Mali | 2 | https://iptv-org.github.io/iptv/countries/ml.m3u |
| 🇲🇹 Malta | 9 | https://iptv-org.github.io/iptv/countries/mt.m3u |
| 🇲🇭 Marshall Islands | 2 | https://iptv-org.github.io/iptv/countries/mh.m3u |
| 🇲🇶 Martinique | 2 | https://iptv-org.github.io/iptv/countries/mq.m3u |
| 🇲🇷 Mauritania | 40 | https://iptv-org.github.io/iptv/countries/mr.m3u |
| 🇲🇺 Mauritius | 2 | https://iptv-org.github.io/iptv/countries/mu.m3u |
| 🇾🇹 Mayotte | 1 | https://iptv-org.github.io/iptv/countries/yt.m3u |
| 🇲🇽 Mexico | 120 | https://iptv-org.github.io/iptv/countries/mx.m3u |
| 🇫🇲 Micronesia | 2 | https://iptv-org.github.io/iptv/countries/fm.m3u |
| 🇲🇩 Moldova | 17 | https://iptv-org.github.io/iptv/countries/md.m3u |
| 🇲🇨 Monaco | 9 | https://iptv-org.github.io/iptv/countries/mc.m3u |
| 🇲🇳 Mongolia | 6 | https://iptv-org.github.io/iptv/countries/mn.m3u |
| 🇲🇪 Montenegro | 12 | https://iptv-org.github.io/iptv/countries/me.m3u |
| 🇲🇦 Morocco | 57 | https://iptv-org.github.io/iptv/countries/ma.m3u |
| 🇲🇿 Mozambique | 3 | https://iptv-org.github.io/iptv/countries/mz.m3u |
| 🇲🇲 Myanmar | 6 | https://iptv-org.github.io/iptv/countries/mm.m3u |
| 🇳🇦 Namibia | 1 | https://iptv-org.github.io/iptv/countries/na.m3u |
| 🇳🇷 Nauru | 2 | https://iptv-org.github.io/iptv/countries/nr.m3u |
| 🇳🇵 Nepal | 11 | https://iptv-org.github.io/iptv/countries/np.m3u |
| 🇳🇱 Netherlands | 98 | https://iptv-org.github.io/iptv/countries/nl.m3u |
| 🇳🇨 New Caledonia | 2 | https://iptv-org.github.io/iptv/countries/nc.m3u |
| 🇳🇿 New Zealand | 20 | https://iptv-org.github.io/iptv/countries/nz.m3u |
| 🇳🇮 Nicaragua | 47 | https://iptv-org.github.io/iptv/countries/ni.m3u |
| 🇳🇪 Niger | 2 | https://iptv-org.github.io/iptv/countries/ne.m3u |
| 🇳🇬 Nigeria | 7 | https://iptv-org.github.io/iptv/countries/ng.m3u |
| 🇳🇺 Niue | 2 | https://iptv-org.github.io/iptv/countries/nu.m3u |
| 🇳🇫 Norfolk Island | 2 | https://iptv-org.github.io/iptv/countries/nf.m3u |
| 🇰🇵 North Korea | 7 | https://iptv-org.github.io/iptv/countries/kp.m3u |
| 🇲🇰 North Macedonia | 9 | https://iptv-org.github.io/iptv/countries/mk.m3u |
| 🇲🇵 Northern Mariana Islands | 2 | https://iptv-org.github.io/iptv/countries/mp.m3u |
| 🇳🇴 Norway | 18 | https://iptv-org.github.io/iptv/countries/no.m3u |
| 🇴🇲 Oman | 51 | https://iptv-org.github.io/iptv/countries/om.m3u |
| 🇵🇰 Pakistan | 31 | https://iptv-org.github.io/iptv/countries/pk.m3u |
| 🇵🇼 Palau | 2 | https://iptv-org.github.io/iptv/countries/pw.m3u |
| 🇵🇸 Palestine | 68 | https://iptv-org.github.io/iptv/countries/ps.m3u |
| 🇵🇦 Panama | 48 | https://iptv-org.github.io/iptv/countries/pa.m3u |
| 🇵🇬 Papua New Guinea | 2 | https://iptv-org.github.io/iptv/countries/pg.m3u |
| 🇵🇾 Paraguay | 47 | https://iptv-org.github.io/iptv/countries/py.m3u |
| 🇵🇪 Peru | 240 | https://iptv-org.github.io/iptv/countries/pe.m3u |
| 🇵🇭 Philippines | 21 | https://iptv-org.github.io/iptv/countries/ph.m3u |
| 🇵🇳 Pitcairn Islands | 2 | https://iptv-org.github.io/iptv/countries/pn.m3u |
| 🇵🇱 Poland | 44 | https://iptv-org.github.io/iptv/countries/pl.m3u |
| 🇵🇹 Portugal | 46 | https://iptv-org.github.io/iptv/countries/pt.m3u |
| 🇵🇷 Puerto Rico | 46 | https://iptv-org.github.io/iptv/countries/pr.m3u |
| 🇶🇦 Qatar | 52 | https://iptv-org.github.io/iptv/countries/qa.m3u |
| 🇷🇪 Réunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
| 🇷🇴 Romania | 52 | https://iptv-org.github.io/iptv/countries/ro.m3u |
| 🇷🇺 Russia | 324 | https://iptv-org.github.io/iptv/countries/ru.m3u |
| 🇷🇼 Rwanda | 3 | https://iptv-org.github.io/iptv/countries/rw.m3u |
| 🇼🇸 Samoa | 2 | https://iptv-org.github.io/iptv/countries/ws.m3u |
| 🇸🇲 San Marino | 8 | https://iptv-org.github.io/iptv/countries/sm.m3u |
| 🇸🇹 São Tomé & Príncipe | 1 | https://iptv-org.github.io/iptv/countries/st.m3u |
| 🇸🇦 Saudi Arabia | 83 | https://iptv-org.github.io/iptv/countries/sa.m3u |
| 🇸🇳 Senegal | 15 | https://iptv-org.github.io/iptv/countries/sn.m3u |
| 🇷🇸 Serbia | 31 | https://iptv-org.github.io/iptv/countries/rs.m3u |
| 🇸🇨 Seychelles | 1 | https://iptv-org.github.io/iptv/countries/sc.m3u |
| 🇸🇱 Sierra Leone | 2 | https://iptv-org.github.io/iptv/countries/sl.m3u |
| 🇸🇬 Singapore | 12 | https://iptv-org.github.io/iptv/countries/sg.m3u |
| 🇸🇰 Slovakia | 36 | https://iptv-org.github.io/iptv/countries/sk.m3u |
| 🇸🇮 Slovenia | 17 | https://iptv-org.github.io/iptv/countries/si.m3u |
| 🇸🇧 Solomon Islands | 2 | https://iptv-org.github.io/iptv/countries/sb.m3u |
| 🇸🇴 Somalia | 45 | https://iptv-org.github.io/iptv/countries/so.m3u |
| 🇿🇦 South Africa | 1 | https://iptv-org.github.io/iptv/countries/za.m3u |
| 🇰🇷 South Korea | 63 | https://iptv-org.github.io/iptv/countries/kr.m3u |
| 🇸🇸 South Sudan | 1 | https://iptv-org.github.io/iptv/countries/ss.m3u |
| 🇪🇸 Spain | 229 | https://iptv-org.github.io/iptv/countries/es.m3u |
| 🇱🇰 Sri Lanka | 18 | https://iptv-org.github.io/iptv/countries/lk.m3u |
| 🇸🇭 St. Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
| 🇸🇩 Sudan | 44 | https://iptv-org.github.io/iptv/countries/sd.m3u |
| 🇸🇪 Sweden | 19 | https://iptv-org.github.io/iptv/countries/se.m3u |
| 🇨🇭 Switzerland | 99 | https://iptv-org.github.io/iptv/countries/ch.m3u |
| 🇸🇾 Syria | 66 | https://iptv-org.github.io/iptv/countries/sy.m3u |
| 🇹🇼 Taiwan | 76 | https://iptv-org.github.io/iptv/countries/tw.m3u |
| 🇹🇯 Tajikistan | 5 | https://iptv-org.github.io/iptv/countries/tj.m3u |
| 🇹🇿 Tanzania | 3 | https://iptv-org.github.io/iptv/countries/tz.m3u |
| 🇹🇭 Thailand | 61 | https://iptv-org.github.io/iptv/countries/th.m3u |
| 🇹🇱 Timor-Leste | 6 | https://iptv-org.github.io/iptv/countries/tl.m3u |
| 🇹🇬 Togo | 1 | https://iptv-org.github.io/iptv/countries/tg.m3u |
| 🇹🇰 Tokelau | 2 | https://iptv-org.github.io/iptv/countries/tk.m3u |
| 🇹🇴 Tonga | 2 | https://iptv-org.github.io/iptv/countries/to.m3u |
| 🇹🇹 Trinidad & Tobago | 0 | https://iptv-org.github.io/iptv/countries/tt.m3u |
| 🇹🇳 Tunisia | 50 | https://iptv-org.github.io/iptv/countries/tn.m3u |
| 🇹🇷 Turkey | 174 | https://iptv-org.github.io/iptv/countries/tr.m3u |
| 🇹🇲 Turkmenistan | 11 | https://iptv-org.github.io/iptv/countries/tm.m3u |
| 🇹🇻 Tuvalu | 2 | https://iptv-org.github.io/iptv/countries/tv.m3u |
| 🇺🇬 Uganda | 3 | https://iptv-org.github.io/iptv/countries/ug.m3u |
| 🇺🇦 Ukraine | 96 | https://iptv-org.github.io/iptv/countries/ua.m3u |
| 🇦🇪 United Arab Emirates | 88 | https://iptv-org.github.io/iptv/countries/ae.m3u |
| 🇬🇧 United Kingdom | 191 | https://iptv-org.github.io/iptv/countries/uk.m3u |
| 🇺🇸 United States | 1865 | https://iptv-org.github.io/iptv/countries/us.m3u |
| 🇺🇾 Uruguay | 44 | https://iptv-org.github.io/iptv/countries/uy.m3u |
| 🇺🇿 Uzbekistan | 5 | https://iptv-org.github.io/iptv/countries/uz.m3u |
| 🇻🇺 Vanuatu | 2 | https://iptv-org.github.io/iptv/countries/vu.m3u |
| 🇻🇦 Vatican City | 7 | https://iptv-org.github.io/iptv/countries/va.m3u |
| 🇻🇪 Venezuela | 54 | https://iptv-org.github.io/iptv/countries/ve.m3u |
| 🇻🇳 Vietnam | 72 | https://iptv-org.github.io/iptv/countries/vn.m3u |
| 🇼🇫 Wallis & Futuna | 2 | https://iptv-org.github.io/iptv/countries/wf.m3u |
| 🇪🇭 Western Sahara | 3 | https://iptv-org.github.io/iptv/countries/eh.m3u |
| 🇾🇪 Yemen | 53 | https://iptv-org.github.io/iptv/countries/ye.m3u |
| 🇿🇲 Zambia | 3 | https://iptv-org.github.io/iptv/countries/zm.m3u |
| 🇿🇼 Zimbabwe | 1 | https://iptv-org.github.io/iptv/countries/zw.m3u |
| Undefined | 209 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
| Country | Channels | Playlist |
| 🇦🇫 Afghanistan | 26 | https://iptv-org.github.io/iptv/countries/af.m3u |
| 🇦🇱 Albania | 121 | https://iptv-org.github.io/iptv/countries/al.m3u |
| 🇩🇿 Algeria | 62 | https://iptv-org.github.io/iptv/countries/dz.m3u |
| 🇦🇸 American Samoa | 2 | https://iptv-org.github.io/iptv/countries/as.m3u |
| 🇦🇩 Andorra | 10 | https://iptv-org.github.io/iptv/countries/ad.m3u |
| 🇦🇴 Angola | 3 | https://iptv-org.github.io/iptv/countries/ao.m3u |
| 🇦🇬 Antigua and Barbuda | 1 | https://iptv-org.github.io/iptv/countries/ag.m3u |
| 🇦🇷 Argentina | 101 | https://iptv-org.github.io/iptv/countries/ar.m3u |
| 🇦🇲 Armenia | 33 | https://iptv-org.github.io/iptv/countries/am.m3u |
| 🇦🇼 Aruba | 3 | https://iptv-org.github.io/iptv/countries/aw.m3u |
| 🇦🇺 Australia | 64 | https://iptv-org.github.io/iptv/countries/au.m3u |
| 🇦🇹 Austria | 31 | https://iptv-org.github.io/iptv/countries/at.m3u |
| 🇦🇿 Azerbaijan | 33 | https://iptv-org.github.io/iptv/countries/az.m3u |
| 🇧🇸 Bahamas | 3 | https://iptv-org.github.io/iptv/countries/bs.m3u |
| 🇧🇭 Bahrain | 45 | https://iptv-org.github.io/iptv/countries/bh.m3u |
| 🇧🇩 Bangladesh | 37 | https://iptv-org.github.io/iptv/countries/bd.m3u |
| 🇧🇧 Barbados | 1 | https://iptv-org.github.io/iptv/countries/bb.m3u |
| 🇧🇾 Belarus | 29 | https://iptv-org.github.io/iptv/countries/by.m3u |
| 🇧🇪 Belgium | 29 | https://iptv-org.github.io/iptv/countries/be.m3u |
| 🇧🇯 Benin | 5 | https://iptv-org.github.io/iptv/countries/bj.m3u |
| 🇧🇹 Bhutan | 9 | https://iptv-org.github.io/iptv/countries/bt.m3u |
| 🇧🇴 Bolivia | 52 | https://iptv-org.github.io/iptv/countries/bo.m3u |
| 🇧🇦 Bosnia and Herzegovina | 17 | https://iptv-org.github.io/iptv/countries/ba.m3u |
| 🇧🇼 Botswana | 1 | https://iptv-org.github.io/iptv/countries/bw.m3u |
| 🇧🇷 Brazil | 190 | https://iptv-org.github.io/iptv/countries/br.m3u |
| 🇧🇳 Brunei | 6 | https://iptv-org.github.io/iptv/countries/bn.m3u |
| 🇧🇬 Bulgaria | 14 | https://iptv-org.github.io/iptv/countries/bg.m3u |
| 🇧🇫 Burkina Faso | 4 | https://iptv-org.github.io/iptv/countries/bf.m3u |
| 🇧🇮 Burundi | 1 | https://iptv-org.github.io/iptv/countries/bi.m3u |
| 🇰🇭 Cambodia | 13 | https://iptv-org.github.io/iptv/countries/kh.m3u |
| 🇨🇲 Cameroon | 5 | https://iptv-org.github.io/iptv/countries/cm.m3u |
| 🇨🇦 Canada | 129 | https://iptv-org.github.io/iptv/countries/ca.m3u |
| 🇨🇻 Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
| 🇨🇫 Central African Republic | 1 | https://iptv-org.github.io/iptv/countries/cf.m3u |
| 🇹🇩 Chad | 1 | https://iptv-org.github.io/iptv/countries/td.m3u |
| 🇨🇱 Chile | 97 | https://iptv-org.github.io/iptv/countries/cl.m3u |
| 🇨🇳 China | 699 | https://iptv-org.github.io/iptv/countries/cn.m3u |
| 🇨🇴 Colombia | 73 | https://iptv-org.github.io/iptv/countries/co.m3u |
| 🇰🇲 Comoros | 37 | https://iptv-org.github.io/iptv/countries/km.m3u |
| 🇨🇰 Cook Islands | 2 | https://iptv-org.github.io/iptv/countries/ck.m3u |
| 🇨🇷 Costa Rica | 63 | https://iptv-org.github.io/iptv/countries/cr.m3u |
| 🇭🇷 Croatia | 18 | https://iptv-org.github.io/iptv/countries/hr.m3u |
| 🇨🇺 Cuba | 36 | https://iptv-org.github.io/iptv/countries/cu.m3u |
| 🇨🇼 Curacao | 4 | https://iptv-org.github.io/iptv/countries/cw.m3u |
| 🇨🇾 Cyprus | 24 | https://iptv-org.github.io/iptv/countries/cy.m3u |
| 🇨🇿 Czech Republic | 25 | https://iptv-org.github.io/iptv/countries/cz.m3u |
| 🇨🇩 Democratic Republic of the Congo | 4 | https://iptv-org.github.io/iptv/countries/cd.m3u |
| 🇩🇰 Denmark | 12 | https://iptv-org.github.io/iptv/countries/dk.m3u |
| 🇩🇯 Djibouti | 39 | https://iptv-org.github.io/iptv/countries/dj.m3u |
| 🇩🇴 Dominican Republic | 94 | https://iptv-org.github.io/iptv/countries/do.m3u |
| 🇹🇱 East Timor | 5 | https://iptv-org.github.io/iptv/countries/tl.m3u |
| 🇪🇨 Ecuador | 59 | https://iptv-org.github.io/iptv/countries/ec.m3u |
| 🇪🇬 Egypt | 71 | https://iptv-org.github.io/iptv/countries/eg.m3u |
| 🇸🇻 El Salvador | 46 | https://iptv-org.github.io/iptv/countries/sv.m3u |
| 🇬🇶 Equatorial Guinea | 2 | https://iptv-org.github.io/iptv/countries/gq.m3u |
| 🇪🇷 Eritrea | 1 | https://iptv-org.github.io/iptv/countries/er.m3u |
| 🇪🇪 Estonia | 11 | https://iptv-org.github.io/iptv/countries/ee.m3u |
| 🇪🇹 Ethiopia | 2 | https://iptv-org.github.io/iptv/countries/et.m3u |
| 🇫🇴 Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
| 🇫🇯 Fiji | 3 | https://iptv-org.github.io/iptv/countries/fj.m3u |
| 🇫🇮 Finland | 12 | https://iptv-org.github.io/iptv/countries/fi.m3u |
| 🇫🇷 France | 153 | https://iptv-org.github.io/iptv/countries/fr.m3u |
| 🇵🇫 French Polynesia | 3 | https://iptv-org.github.io/iptv/countries/pf.m3u |
| 🇹🇫 French Southern Territories | 1 | https://iptv-org.github.io/iptv/countries/tf.m3u |
| 🇬🇦 Gabon | 1 | https://iptv-org.github.io/iptv/countries/ga.m3u |
| 🇬🇲 Gambia | 2 | https://iptv-org.github.io/iptv/countries/gm.m3u |
| 🇬🇪 Georgia | 17 | https://iptv-org.github.io/iptv/countries/ge.m3u |
| 🇩🇪 Germany | 183 | https://iptv-org.github.io/iptv/countries/de.m3u |
| 🇬🇭 Ghana | 3 | https://iptv-org.github.io/iptv/countries/gh.m3u |
| 🇬🇷 Greece | 94 | https://iptv-org.github.io/iptv/countries/gr.m3u |
| 🇬🇱 Greenland | 2 | https://iptv-org.github.io/iptv/countries/gl.m3u |
| 🇬🇵 Guadeloupe | 1 | https://iptv-org.github.io/iptv/countries/gp.m3u |
| 🇬🇺 Guam | 2 | https://iptv-org.github.io/iptv/countries/gu.m3u |
| 🇬🇹 Guatemala | 40 | https://iptv-org.github.io/iptv/countries/gt.m3u |
| 🇬🇳 Guinea | 2 | https://iptv-org.github.io/iptv/countries/gn.m3u |
| 🇬🇼 Guinea-Bissau | 1 | https://iptv-org.github.io/iptv/countries/gw.m3u |
| 🇭🇹 Haiti | 14 | https://iptv-org.github.io/iptv/countries/ht.m3u |
| 🇭🇳 Honduras | 54 | https://iptv-org.github.io/iptv/countries/hn.m3u |
| 🇭🇰 Hong Kong | 17 | https://iptv-org.github.io/iptv/countries/hk.m3u |
| 🇭🇺 Hungary | 34 | https://iptv-org.github.io/iptv/countries/hu.m3u |
| 🇮🇸 Iceland | 6 | https://iptv-org.github.io/iptv/countries/is.m3u |
| 🇮🇳 India | 311 | https://iptv-org.github.io/iptv/countries/in.m3u |
| 🇮🇩 Indonesia | 79 | https://iptv-org.github.io/iptv/countries/id.m3u |
| 🇮🇷 Iran | 177 | https://iptv-org.github.io/iptv/countries/ir.m3u |
| 🇮🇶 Iraq | 92 | https://iptv-org.github.io/iptv/countries/iq.m3u |
| 🇮🇪 Ireland | 15 | https://iptv-org.github.io/iptv/countries/ie.m3u |
| 🇮🇱 Israel | 22 | https://iptv-org.github.io/iptv/countries/il.m3u |
| 🇮🇹 Italy | 200 | https://iptv-org.github.io/iptv/countries/it.m3u |
| 🇨🇮 Ivory Coast | 2 | https://iptv-org.github.io/iptv/countries/ci.m3u |
| 🇯🇲 Jamaica | 1 | https://iptv-org.github.io/iptv/countries/jm.m3u |
| 🇯🇵 Japan | 56 | https://iptv-org.github.io/iptv/countries/jp.m3u |
| 🇯🇴 Jordan | 62 | https://iptv-org.github.io/iptv/countries/jo.m3u |
| 🇰🇿 Kazakhstan | 25 | https://iptv-org.github.io/iptv/countries/kz.m3u |
| 🇰🇪 Kenya | 14 | https://iptv-org.github.io/iptv/countries/ke.m3u |
| 🇰🇮 Kiribati | 2 | https://iptv-org.github.io/iptv/countries/ki.m3u |
| 🇽🇰 Kosovo | 4 | https://iptv-org.github.io/iptv/countries/xk.m3u |
| 🇰🇼 Kuwait | 62 | https://iptv-org.github.io/iptv/countries/kw.m3u |
| 🇰🇬 Kyrgyzstan | 6 | https://iptv-org.github.io/iptv/countries/kg.m3u |
| 🇱🇦 Laos | 36 | https://iptv-org.github.io/iptv/countries/la.m3u |
| 🇱🇻 Latvia | 9 | https://iptv-org.github.io/iptv/countries/lv.m3u |
| 🇱🇧 Lebanon | 66 | https://iptv-org.github.io/iptv/countries/lb.m3u |
| 🇱🇸 Lesotho | 1 | https://iptv-org.github.io/iptv/countries/ls.m3u |
| 🇱🇷 Liberia | 1 | https://iptv-org.github.io/iptv/countries/lr.m3u |
| 🇱🇾 Libya | 47 | https://iptv-org.github.io/iptv/countries/ly.m3u |
| 🇱🇮 Liechtenstein | 6 | https://iptv-org.github.io/iptv/countries/li.m3u |
| 🇱🇹 Lithuania | 9 | https://iptv-org.github.io/iptv/countries/lt.m3u |
| 🇱🇺 Luxembourg | 14 | https://iptv-org.github.io/iptv/countries/lu.m3u |
| 🇲🇴 Macao | 10 | https://iptv-org.github.io/iptv/countries/mo.m3u |
| 🇲🇬 Madagascar | 1 | https://iptv-org.github.io/iptv/countries/mg.m3u |
| 🇲🇼 Malawi | 1 | https://iptv-org.github.io/iptv/countries/mw.m3u |
| 🇲🇾 Malaysia | 27 | https://iptv-org.github.io/iptv/countries/my.m3u |
| 🇲🇻 Maldives | 10 | https://iptv-org.github.io/iptv/countries/mv.m3u |
| 🇲🇱 Mali | 2 | https://iptv-org.github.io/iptv/countries/ml.m3u |
| 🇲🇹 Malta | 8 | https://iptv-org.github.io/iptv/countries/mt.m3u |
| 🇲🇭 Marshall Islands | 2 | https://iptv-org.github.io/iptv/countries/mh.m3u |
| 🇲🇶 Martinique | 2 | https://iptv-org.github.io/iptv/countries/mq.m3u |
| 🇲🇷 Mauritania | 37 | https://iptv-org.github.io/iptv/countries/mr.m3u |
| 🇲🇺 Mauritius | 1 | https://iptv-org.github.io/iptv/countries/mu.m3u |
| 🇾🇹 Mayotte | 1 | https://iptv-org.github.io/iptv/countries/yt.m3u |
| 🇲🇽 Mexico | 111 | https://iptv-org.github.io/iptv/countries/mx.m3u |
| 🇫🇲 Micronesia | 2 | https://iptv-org.github.io/iptv/countries/fm.m3u |
| 🇲🇩 Moldova | 15 | https://iptv-org.github.io/iptv/countries/md.m3u |
| 🇲🇨 Monaco | 8 | https://iptv-org.github.io/iptv/countries/mc.m3u |
| 🇲🇳 Mongolia | 5 | https://iptv-org.github.io/iptv/countries/mn.m3u |
| 🇲🇪 Montenegro | 10 | https://iptv-org.github.io/iptv/countries/me.m3u |
| 🇲🇦 Morocco | 54 | https://iptv-org.github.io/iptv/countries/ma.m3u |
| 🇲🇿 Mozambique | 4 | https://iptv-org.github.io/iptv/countries/mz.m3u |
| 🇲🇲 Myanmar [Burma] | 5 | https://iptv-org.github.io/iptv/countries/mm.m3u |
| 🇳🇦 Namibia | 1 | https://iptv-org.github.io/iptv/countries/na.m3u |
| 🇳🇷 Nauru | 2 | https://iptv-org.github.io/iptv/countries/nr.m3u |
| 🇳🇵 Nepal | 10 | https://iptv-org.github.io/iptv/countries/np.m3u |
| 🇳🇱 Netherlands | 96 | https://iptv-org.github.io/iptv/countries/nl.m3u |
| 🇳🇨 New Caledonia | 2 | https://iptv-org.github.io/iptv/countries/nc.m3u |
| 🇳🇿 New Zealand | 19 | https://iptv-org.github.io/iptv/countries/nz.m3u |
| 🇳🇮 Nicaragua | 43 | https://iptv-org.github.io/iptv/countries/ni.m3u |
| 🇳🇪 Niger | 2 | https://iptv-org.github.io/iptv/countries/ne.m3u |
| 🇳🇬 Nigeria | 7 | https://iptv-org.github.io/iptv/countries/ng.m3u |
| 🇳🇺 Niue | 2 | https://iptv-org.github.io/iptv/countries/nu.m3u |
| 🇳🇫 Norfolk Island | 2 | https://iptv-org.github.io/iptv/countries/nf.m3u |
| 🇰🇵 North Korea | 6 | https://iptv-org.github.io/iptv/countries/kp.m3u |
| 🇲🇰 North Macedonia | 7 | https://iptv-org.github.io/iptv/countries/mk.m3u |
| 🇲🇵 Northern Mariana Islands | 2 | https://iptv-org.github.io/iptv/countries/mp.m3u |
| 🇳🇴 Norway | 17 | https://iptv-org.github.io/iptv/countries/no.m3u |
| 🇴🇲 Oman | 47 | https://iptv-org.github.io/iptv/countries/om.m3u |
| 🇵🇰 Pakistan | 29 | https://iptv-org.github.io/iptv/countries/pk.m3u |
| 🇵🇼 Palau | 2 | https://iptv-org.github.io/iptv/countries/pw.m3u |
| 🇵🇸 Palestine | 64 | https://iptv-org.github.io/iptv/countries/ps.m3u |
| 🇵🇦 Panama | 44 | https://iptv-org.github.io/iptv/countries/pa.m3u |
| 🇵🇬 Papua New Guinea | 2 | https://iptv-org.github.io/iptv/countries/pg.m3u |
| 🇵🇾 Paraguay | 44 | https://iptv-org.github.io/iptv/countries/py.m3u |
| 🇵🇪 Peru | 235 | https://iptv-org.github.io/iptv/countries/pe.m3u |
| 🇵🇭 Philippines | 21 | https://iptv-org.github.io/iptv/countries/ph.m3u |
| 🇵🇳 Pitcairn Islands | 2 | https://iptv-org.github.io/iptv/countries/pn.m3u |
| 🇵🇱 Poland | 39 | https://iptv-org.github.io/iptv/countries/pl.m3u |
| 🇵🇹 Portugal | 42 | https://iptv-org.github.io/iptv/countries/pt.m3u |
| 🇵🇷 Puerto Rico | 43 | https://iptv-org.github.io/iptv/countries/pr.m3u |
| 🇶🇦 Qatar | 49 | https://iptv-org.github.io/iptv/countries/qa.m3u |
| 🇨🇬 Republic of the Congo | 2 | https://iptv-org.github.io/iptv/countries/cg.m3u |
| 🇷🇴 Romania | 53 | https://iptv-org.github.io/iptv/countries/ro.m3u |
| 🇷🇺 Russia | 318 | https://iptv-org.github.io/iptv/countries/ru.m3u |
| 🇷🇼 Rwanda | 3 | https://iptv-org.github.io/iptv/countries/rw.m3u |
| 🇷🇪 Réunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
| 🇸🇭 Saint Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
| 🇼🇸 Samoa | 2 | https://iptv-org.github.io/iptv/countries/ws.m3u |
| 🇸🇲 San Marino | 7 | https://iptv-org.github.io/iptv/countries/sm.m3u |
| 🇸🇦 Saudi Arabia | 76 | https://iptv-org.github.io/iptv/countries/sa.m3u |
| 🇸🇳 Senegal | 15 | https://iptv-org.github.io/iptv/countries/sn.m3u |
| 🇷🇸 Serbia | 28 | https://iptv-org.github.io/iptv/countries/rs.m3u |
| 🇸🇨 Seychelles | 1 | https://iptv-org.github.io/iptv/countries/sc.m3u |
| 🇸🇱 Sierra Leone | 2 | https://iptv-org.github.io/iptv/countries/sl.m3u |
| 🇸🇬 Singapore | 11 | https://iptv-org.github.io/iptv/countries/sg.m3u |
| 🇸🇰 Slovakia | 30 | https://iptv-org.github.io/iptv/countries/sk.m3u |
| 🇸🇮 Slovenia | 16 | https://iptv-org.github.io/iptv/countries/si.m3u |
| 🇸🇧 Solomon Islands | 2 | https://iptv-org.github.io/iptv/countries/sb.m3u |
| 🇸🇴 Somalia | 41 | https://iptv-org.github.io/iptv/countries/so.m3u |
| 🇿🇦 South Africa | 1 | https://iptv-org.github.io/iptv/countries/za.m3u |
| 🇰🇷 South Korea | 56 | https://iptv-org.github.io/iptv/countries/kr.m3u |
| 🇸🇸 South Sudan | 1 | https://iptv-org.github.io/iptv/countries/ss.m3u |
| 🇪🇸 Spain | 197 | https://iptv-org.github.io/iptv/countries/es.m3u |
| 🇱🇰 Sri Lanka | 18 | https://iptv-org.github.io/iptv/countries/lk.m3u |
| 🇸🇩 Sudan | 40 | https://iptv-org.github.io/iptv/countries/sd.m3u |
| 🇸🇿 Swaziland | 1 | https://iptv-org.github.io/iptv/countries/sz.m3u |
| 🇸🇪 Sweden | 16 | https://iptv-org.github.io/iptv/countries/se.m3u |
| 🇨🇭 Switzerland | 94 | https://iptv-org.github.io/iptv/countries/ch.m3u |
| 🇸🇾 Syria | 61 | https://iptv-org.github.io/iptv/countries/sy.m3u |
| 🇸🇹 São Tomé and Príncipe | 1 | https://iptv-org.github.io/iptv/countries/st.m3u |
| 🇹🇼 Taiwan | 78 | https://iptv-org.github.io/iptv/countries/tw.m3u |
| 🇹🇯 Tajikistan | 4 | https://iptv-org.github.io/iptv/countries/tj.m3u |
| 🇹🇿 Tanzania | 3 | https://iptv-org.github.io/iptv/countries/tz.m3u |
| 🇹🇭 Thailand | 57 | https://iptv-org.github.io/iptv/countries/th.m3u |
| 🇹🇬 Togo | 1 | https://iptv-org.github.io/iptv/countries/tg.m3u |
| 🇹🇰 Tokelau | 2 | https://iptv-org.github.io/iptv/countries/tk.m3u |
| 🇹🇴 Tonga | 2 | https://iptv-org.github.io/iptv/countries/to.m3u |
| 🇹🇹 Trinidad and Tobago | 0 | https://iptv-org.github.io/iptv/countries/tt.m3u |
| 🇹🇳 Tunisia | 47 | https://iptv-org.github.io/iptv/countries/tn.m3u |
| 🇹🇷 Turkey | 167 | https://iptv-org.github.io/iptv/countries/tr.m3u |
| 🇹🇲 Turkmenistan | 10 | https://iptv-org.github.io/iptv/countries/tm.m3u |
| 🇹🇻 Tuvalu | 2 | https://iptv-org.github.io/iptv/countries/tv.m3u |
| 🇺🇬 Uganda | 4 | https://iptv-org.github.io/iptv/countries/ug.m3u |
| 🇺🇦 Ukraine | 96 | https://iptv-org.github.io/iptv/countries/ua.m3u |
| 🇦🇪 United Arab Emirates | 84 | https://iptv-org.github.io/iptv/countries/ae.m3u |
| 🇬🇧 United Kingdom | 184 | https://iptv-org.github.io/iptv/countries/uk.m3u |
| 🇺🇸 United States | 1823 | https://iptv-org.github.io/iptv/countries/us.m3u |
| 🇺🇾 Uruguay | 38 | https://iptv-org.github.io/iptv/countries/uy.m3u |
| 🇺🇿 Uzbekistan | 4 | https://iptv-org.github.io/iptv/countries/uz.m3u |
| 🇻🇺 Vanuatu | 2 | https://iptv-org.github.io/iptv/countries/vu.m3u |
| 🇻🇦 Vatican City | 6 | https://iptv-org.github.io/iptv/countries/va.m3u |
| 🇻🇪 Venezuela | 50 | https://iptv-org.github.io/iptv/countries/ve.m3u |
| 🇻🇳 Vietnam | 71 | https://iptv-org.github.io/iptv/countries/vn.m3u |
| 🇼🇫 Wallis and Futuna | 2 | https://iptv-org.github.io/iptv/countries/wf.m3u |
| 🇪🇭 Western Sahara | 3 | https://iptv-org.github.io/iptv/countries/eh.m3u |
| 🇾🇪 Yemen | 49 | https://iptv-org.github.io/iptv/countries/ye.m3u |
| 🇿🇲 Zambia | 2 | https://iptv-org.github.io/iptv/countries/zm.m3u |
| 🇿🇼 Zimbabwe | 1 | https://iptv-org.github.io/iptv/countries/zw.m3u |
| 🌍 International | 33 | https://iptv-org.github.io/iptv/countries/int.m3u |
| Undefined | 224 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
https://iptv-org.github.io/iptv/categories/${category.slug}.m3u`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Category', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_categories.md', table)
+}
+
+async function generateCountryTable() {
+ logger.info('Generating country table...')
+
+ const rows = []
+ for (const country of countries) {
+ const flag = getCountryFlag(country.code)
+ const prefix = flag ? `${flag} ` : ''
+
+ rows.push({
+ country: prefix + country.name,
+ channels: country.count,
+ playlist: `https://iptv-org.github.io/iptv/countries/${country.code.toLowerCase()}.m3u`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Country', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_countries.md', table)
+}
+
+async function generateRegionTable() {
+ logger.info('Generating region table...')
+
+ const rows = []
+ for (const region of regions) {
+ rows.push({
+ region: region.name,
+ channels: region.count,
+ playlist: `https://iptv-org.github.io/iptv/regions/${region.code.toLowerCase()}.m3u`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Region', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_regions.md', table)
+}
+
+async function generateLanguageTable() {
+ logger.info('Generating language table...')
+
+ const rows = []
+ for (const language of languages) {
+ rows.push({
+ language: language.name,
+ channels: language.count,
+ playlist: `https://iptv-org.github.io/iptv/languages/${language.code}.m3u`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Language', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_languages.md', table)
+}
+
+async function updateReadme() {
+ logger.info('Updating README.md...')
+
+ const config = require(file.resolve(options.config))
+ await file.createDir(file.dirname(config.build))
+ await markdown.compile(options.config)
+}
+
+async function setUp() {
+ categories = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/categories.log`)
+ countries = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/countries.log`)
+ languages = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/languages.log`)
+ regions = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/regions.log`)
+}
+
+function getCountryFlag(code) {
+ switch (code) {
+ case 'UK':
+ return '🇬🇧'
+ case 'INT':
+ return '🌍'
+ case 'UNDEFINED':
+ return ''
+ default:
+ return code.replace(/./g, char => String.fromCodePoint(char.charCodeAt(0) + 127397))
+ }
+}
diff --git a/scripts/commands/validate.js b/scripts/commands/validate.js
new file mode 100644
index 0000000000..0d2b716558
--- /dev/null
+++ b/scripts/commands/validate.js
@@ -0,0 +1,55 @@
+const blocklist = require('../data/blocklist')
+const parser = require('iptv-playlist-parser')
+const { file, logger } = require('../core')
+const { program } = require('commander')
+
+const options = program
+ .option('--input-dir | ${column.name} | ` + } + output += '
|---|
| ${item[prop]} | ` + i++ + } + output += '
https://iptv-org.github.io/iptv/categories/${category.id}.m3u`
- })
- }
-
- const table = generateTable(categories, {
- columns: [
- { name: 'Category', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left' }
- ]
- })
-
- file.create('./.readme/_categories.md', table)
-}
-
-function generateCountriesTable() {
- log.print('Generating countries table...\n')
-
- const countries = []
- for (const country of [
- ...db.countries.sortBy(['name']).all(),
- { name: 'Undefined', code: 'undefined' }
- ]) {
- let flag = utils.code2flag(country.code)
- const prefix = flag ? `${flag} ` : ''
- countries.push({
- country: prefix + country.name,
- channels: db.channels
- .forCountry(country)
- .removeOffline()
- .removeDuplicates()
- .removeNSFW()
- .count(),
- playlist: `https://iptv-org.github.io/iptv/countries/${country.code}.m3u`
- })
- }
-
- const table = generateTable(countries, {
- columns: [
- { name: 'Country', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left', nowrap: true }
- ]
- })
-
- file.create('./.readme/_countries.md', table)
-}
-
-function generateLanguagesTable() {
- log.print('Generating languages table...\n')
- const languages = []
-
- for (const language of [
- ...db.languages.sortBy(['name']).all(),
- { name: 'Undefined', code: 'undefined' }
- ]) {
- languages.push({
- language: language.name,
- channels: db.channels
- .forLanguage(language)
- .removeOffline()
- .removeDuplicates()
- .removeNSFW()
- .count(),
- playlist: `https://iptv-org.github.io/iptv/languages/${language.code}.m3u`
- })
- }
-
- const table = generateTable(languages, {
- columns: [
- { name: 'Language', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left' }
- ]
- })
-
- file.create('./.readme/_languages.md', table)
-}
-
-function generateTable(data, options) {
- let output = '| ${column.name} | ` - } - output += '
|---|
| ${item[prop]} | ` - i++ - } - output += '
| Category | Channels | Playlist |
|---|---|---|
| General | 1 | https://iptv-org.github.io/iptv/categories/general.m3u |
| News | 1 | https://iptv-org.github.io/iptv/categories/news.m3u |
| Other | 0 | https://iptv-org.github.io/iptv/categories/other.m3u |
| Language | Channels | Playlist |
|---|---|---|
| Catalan | 0 | https://iptv-org.github.io/iptv/languages/cat.m3u |
| English | 1 | https://iptv-org.github.io/iptv/languages/eng.m3u |
| Russian | 1 | https://iptv-org.github.io/iptv/languages/rus.m3u |
| Undefined | 0 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
| Region | Channels | Playlist |
|---|---|---|
| Asia | 1 | https://iptv-org.github.io/iptv/regions/asia.m3u |
| Commonwealth of Independent States | 1 | https://iptv-org.github.io/iptv/regions/cis.m3u |
| Europe | 2 | https://iptv-org.github.io/iptv/regions/eur.m3u |
| Europe, the Middle East and Africa | 2 | https://iptv-org.github.io/iptv/regions/emea.m3u |
| Undefined | 0 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
| Country | Channels | Playlist |
|---|---|---|
| 🇦🇩 Andorra | 0 | https://iptv-org.github.io/iptv/countries/ad.m3u |
| 🇷🇺 Russia | 1 | https://iptv-org.github.io/iptv/countries/ru.m3u |
| 🇬🇧 United Kingdom | 1 | https://iptv-org.github.io/iptv/countries/uk.m3u |
| 🌍 International | 0 | https://iptv-org.github.io/iptv/countries/int.m3u |
| Undefined | 0 | https://iptv-org.github.io/iptv/countries/undefined.m3u |