{"id":2346,"date":"2025-04-03T18:30:07","date_gmt":"2025-04-03T17:30:07","guid":{"rendered":"https:\/\/gray-pony-639478.hostingersite.com\/?page_id=2346"},"modified":"2026-09-05T03:26:06","modified_gmt":"2026-09-05T02:26:06","slug":"channels-list","status":"publish","type":"page","link":"https:\/\/8kiptv.org\/tv\/channels-list\/","title":{"rendered":"channels list"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2346\" class=\"elementor elementor-2346\">\n\t\t\t\t<div class=\"elementor-element elementor-element-876ba33 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"876ba33\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-03711cf elementor-widget elementor-widget-heading\" data-id=\"03711cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">8K IPTV Channels List \u2013 50,000+ Live TV Channels<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4575332 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"4575332\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-39b3259 elementor-widget elementor-widget-html\" data-id=\"39b3259\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"iptv-directory\">\r\n\r\n  <div class=\"iptv-wrap\">\r\n\r\n    <!-- HEADER -->\r\n    <div class=\"iptv-head\">\r\n\r\n      <div class=\"iptv-title-box\">\r\n\r\n        <div class=\"iptv-kicker\">\r\n          8K IPTV CHANNEL DIRECTORY\r\n        <\/div>\r\n\r\n        <h2>\r\n          Live TV Channels\r\n        <\/h2>\r\n\r\n        <p>\r\n          Browse thousands of live TV channels from around the world.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"iptv-count\" id=\"iptvCount\">\r\n        Loading...\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- FILTERS -->\r\n    <div class=\"iptv-controls\">\r\n\r\n      <div class=\"iptv-search\">\r\n\r\n        <span class=\"iptv-search-icon\">\u2315<\/span>\r\n\r\n        <input\r\n          type=\"text\"\r\n          id=\"iptvSearch\"\r\n          placeholder=\"Search channels...\"\r\n          autocomplete=\"off\"\r\n        >\r\n\r\n      <\/div>\r\n\r\n\r\n      <select id=\"iptvCategory\">\r\n        <option value=\"\">\r\n          All Categories\r\n        <\/option>\r\n      <\/select>\r\n\r\n\r\n      <select id=\"iptvRegion\">\r\n        <option value=\"\">\r\n          All Regions\r\n        <\/option>\r\n      <\/select>\r\n\r\n\r\n      <button\r\n        type=\"button\"\r\n        id=\"iptvClear\"\r\n      >\r\n        Clear\r\n      <\/button>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- STATUS -->\r\n    <div\r\n      class=\"iptv-status\"\r\n      id=\"iptvStatus\"\r\n    >\r\n      Loading channel database...\r\n    <\/div>\r\n\r\n\r\n    <!-- CHANNEL GRID -->\r\n    <div\r\n      class=\"iptv-grid\"\r\n      id=\"iptvGrid\"\r\n    ><\/div>\r\n\r\n\r\n    <!-- EMPTY -->\r\n    <div\r\n      class=\"iptv-empty\"\r\n      id=\"iptvEmpty\"\r\n    >\r\n\r\n      <div class=\"iptv-empty-icon\">\r\n        \u2315\r\n      <\/div>\r\n\r\n      <h3>\r\n        No channels found\r\n      <\/h3>\r\n\r\n      <p>\r\n        Try another search or filter.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- PAGINATION -->\r\n    <div\r\n      class=\"iptv-pagination\"\r\n      id=\"iptvPagination\"\r\n    ><\/div>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<style>\r\n\r\n#iptv-directory {\r\n\r\n  --iptv-gold: #f5b83d;\r\n  --iptv-gold-light: #ffd66b;\r\n\r\n  --iptv-bg: #070c12;\r\n  --iptv-card: #111821;\r\n  --iptv-card-hover: #151e29;\r\n\r\n  --iptv-border: rgba(255,255,255,.08);\r\n\r\n  --iptv-text: #ffffff;\r\n  --iptv-muted: #96a2b3;\r\n\r\n  width: 100% !important;\r\n  max-width: 100% !important;\r\n\r\n  min-width: 0 !important;\r\n\r\n  overflow: hidden !important;\r\n\r\n  color: var(--iptv-text);\r\n\r\n  font-family:\r\n    Arial,\r\n    Helvetica,\r\n    sans-serif;\r\n\r\n  box-sizing: border-box;\r\n\r\n}\r\n\r\n\r\n#iptv-directory *,\r\n#iptv-directory *::before,\r\n#iptv-directory *::after {\r\n\r\n  box-sizing: border-box;\r\n\r\n}\r\n\r\n\r\n\/* MAIN WRAPPER *\/\r\n\r\n#iptv-directory .iptv-wrap {\r\n\r\n  width: 100% !important;\r\n\r\n  max-width: 1250px !important;\r\n\r\n  min-width: 0 !important;\r\n\r\n  margin-left: auto !important;\r\n\r\n  margin-right: auto !important;\r\n\r\n  padding:\r\n    35px 20px 55px;\r\n\r\n}\r\n\r\n\r\n\/* HEADER *\/\r\n\r\n#iptv-directory .iptv-head {\r\n\r\n  width: 100%;\r\n\r\n  display: flex;\r\n\r\n  align-items: flex-end;\r\n\r\n  justify-content: space-between;\r\n\r\n  gap: 25px;\r\n\r\n  margin-bottom: 26px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-title-box {\r\n\r\n  min-width: 0;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-kicker {\r\n\r\n  color: var(--iptv-gold);\r\n\r\n  font-size: 11px;\r\n\r\n  font-weight: 800;\r\n\r\n  letter-spacing: 2.8px;\r\n\r\n  line-height: 1;\r\n\r\n  margin-bottom: 10px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory h2 {\r\n\r\n  margin: 0;\r\n\r\n  padding: 0;\r\n\r\n  color: #ffffff;\r\n\r\n  font-size: 40px;\r\n\r\n  line-height: 1.1;\r\n\r\n  font-weight: 800;\r\n\r\n  letter-spacing: -1px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-title-box p {\r\n\r\n  margin:\r\n    10px 0 0;\r\n\r\n  color: var(--iptv-muted);\r\n\r\n  font-size: 14px;\r\n\r\n  line-height: 1.5;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-count {\r\n\r\n  flex: 0 0 auto;\r\n\r\n  white-space: nowrap;\r\n\r\n  padding:\r\n    9px 14px;\r\n\r\n  border:\r\n    1px solid rgba(245,184,61,.20);\r\n\r\n  border-radius: 999px;\r\n\r\n  background:\r\n    rgba(245,184,61,.07);\r\n\r\n  color: var(--iptv-gold);\r\n\r\n  font-size: 12px;\r\n\r\n  font-weight: 700;\r\n\r\n}\r\n\r\n\r\n\/* FILTER AREA *\/\r\n\r\n#iptv-directory .iptv-controls {\r\n\r\n  width: 100%;\r\n\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    minmax(0, 1fr)\r\n    minmax(0, 220px)\r\n    minmax(0, 190px)\r\n    80px;\r\n\r\n  gap: 10px;\r\n\r\n  margin-bottom: 15px;\r\n\r\n}\r\n\r\n\r\n\/* SEARCH *\/\r\n\r\n#iptv-directory .iptv-search {\r\n\r\n  position: relative;\r\n\r\n  min-width: 0;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-search-icon {\r\n\r\n  position: absolute;\r\n\r\n  left: 15px;\r\n\r\n  top: 50%;\r\n\r\n  transform:\r\n    translateY(-50%);\r\n\r\n  color: #8793a4;\r\n\r\n  font-size: 21px;\r\n\r\n  line-height: 1;\r\n\r\n  pointer-events: none;\r\n\r\n}\r\n\r\n\r\n#iptv-directory input,\r\n#iptv-directory select,\r\n#iptv-directory button {\r\n\r\n  width: 100%;\r\n\r\n  max-width: 100%;\r\n\r\n  min-width: 0;\r\n\r\n  height: 48px;\r\n\r\n  border:\r\n    1px solid var(--iptv-border);\r\n\r\n  border-radius: 9px;\r\n\r\n  outline: none;\r\n\r\n  font-family: inherit;\r\n\r\n  font-size: 13px;\r\n\r\n}\r\n\r\n\r\n\/* INPUT *\/\r\n\r\n#iptv-directory input {\r\n\r\n  padding:\r\n    0 15px 0 43px;\r\n\r\n  background: #111821;\r\n\r\n  color: #ffffff;\r\n\r\n}\r\n\r\n\r\n#iptv-directory input::placeholder {\r\n\r\n  color: #748092;\r\n\r\n}\r\n\r\n\r\n#iptv-directory input:focus {\r\n\r\n  border-color:\r\n    rgba(245,184,61,.55);\r\n\r\n}\r\n\r\n\r\n\/* SELECT *\/\r\n\r\n#iptv-directory select {\r\n\r\n  padding:\r\n    0 13px;\r\n\r\n  background:\r\n    #111821;\r\n\r\n  color: #ffffff;\r\n\r\n  cursor: pointer;\r\n\r\n}\r\n\r\n\r\n#iptv-directory select:focus {\r\n\r\n  border-color:\r\n    rgba(245,184,61,.55);\r\n\r\n}\r\n\r\n\r\n\/* CLEAR *\/\r\n\r\n#iptv-directory #iptvClear {\r\n\r\n  padding:\r\n    0 12px;\r\n\r\n  background:\r\n    #151d27;\r\n\r\n  color:\r\n    #ffffff;\r\n\r\n  cursor:\r\n    pointer;\r\n\r\n  transition:\r\n    .2s ease;\r\n\r\n}\r\n\r\n\r\n#iptv-directory #iptvClear:hover {\r\n\r\n  color:\r\n    var(--iptv-gold-light);\r\n\r\n  border-color:\r\n    rgba(245,184,61,.45);\r\n\r\n}\r\n\r\n\r\n\/* STATUS *\/\r\n\r\n#iptv-directory .iptv-status {\r\n\r\n  min-height: 19px;\r\n\r\n  margin:\r\n    8px 0 17px;\r\n\r\n  color:\r\n    #8290a2;\r\n\r\n  font-size:\r\n    12px;\r\n\r\n  line-height:\r\n    1.5;\r\n\r\n}\r\n\r\n\r\n\/* GRID *\/\r\n\r\n#iptv-directory .iptv-grid {\r\n\r\n  width: 100%;\r\n\r\n  min-width: 0;\r\n\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    repeat(4, minmax(0, 1fr));\r\n\r\n  gap: 13px;\r\n\r\n}\r\n\r\n\r\n\/* CARD *\/\r\n\r\n#iptv-directory .iptv-card {\r\n\r\n  width: 100%;\r\n\r\n  min-width: 0;\r\n\r\n  height: 106px;\r\n\r\n  display: flex;\r\n\r\n  align-items: center;\r\n\r\n  gap: 13px;\r\n\r\n  padding: 12px;\r\n\r\n  overflow: hidden;\r\n\r\n  border:\r\n    1px solid var(--iptv-border);\r\n\r\n  border-radius: 10px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      145deg,\r\n      rgba(255,255,255,.025),\r\n      rgba(255,255,255,.005)\r\n    ),\r\n    var(--iptv-card);\r\n\r\n  transition:\r\n    transform .2s ease,\r\n    border-color .2s ease,\r\n    background .2s ease;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-card:hover {\r\n\r\n  transform:\r\n    translateY(-2px);\r\n\r\n  border-color:\r\n    rgba(245,184,61,.30);\r\n\r\n  background:\r\n    var(--iptv-card-hover);\r\n\r\n}\r\n\r\n\r\n\/* LOGO *\/\r\n\r\n#iptv-directory .iptv-logo {\r\n\r\n  width: 62px;\r\n\r\n  height: 62px;\r\n\r\n  flex:\r\n    0 0 62px;\r\n\r\n  display: flex;\r\n\r\n  align-items: center;\r\n\r\n  justify-content: center;\r\n\r\n  overflow: hidden;\r\n\r\n  border-radius: 8px;\r\n\r\n  background:\r\n    #080c12;\r\n\r\n  border:\r\n    1px solid rgba(255,255,255,.06);\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-logo img {\r\n\r\n  width: 100%;\r\n\r\n  height: 100%;\r\n\r\n  display: block;\r\n\r\n  object-fit: contain;\r\n\r\n  padding: 5px;\r\n\r\n}\r\n\r\n\r\n\/* INFO *\/\r\n\r\n#iptv-directory .iptv-info {\r\n\r\n  min-width: 0;\r\n\r\n  flex: 1;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-name {\r\n\r\n  color: #ffffff;\r\n\r\n  font-size: 13px;\r\n\r\n  line-height: 1.35;\r\n\r\n  font-weight: 700;\r\n\r\n  display:\r\n    -webkit-box;\r\n\r\n  -webkit-box-orient:\r\n    vertical;\r\n\r\n  -webkit-line-clamp:\r\n    2;\r\n\r\n  overflow:\r\n    hidden;\r\n\r\n  word-break:\r\n    break-word;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-meta {\r\n\r\n  margin-top: 6px;\r\n\r\n  color: #758294;\r\n\r\n  font-size: 10px;\r\n\r\n  line-height: 1.3;\r\n\r\n  white-space: nowrap;\r\n\r\n  overflow: hidden;\r\n\r\n  text-overflow: ellipsis;\r\n\r\n}\r\n\r\n\r\n\/* EMPTY *\/\r\n\r\n#iptv-directory .iptv-empty {\r\n\r\n  display: none;\r\n\r\n  width: 100%;\r\n\r\n  text-align: center;\r\n\r\n  padding:\r\n    70px 20px;\r\n\r\n  border:\r\n    1px solid var(--iptv-border);\r\n\r\n  border-radius: 12px;\r\n\r\n  background:\r\n    #0d131b;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-empty.show {\r\n\r\n  display: block;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-empty-icon {\r\n\r\n  color:\r\n    var(--iptv-gold);\r\n\r\n  font-size: 35px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-empty h3 {\r\n\r\n  margin:\r\n    12px 0 6px;\r\n\r\n  color:\r\n    #ffffff;\r\n\r\n  font-size:\r\n    18px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .iptv-empty p {\r\n\r\n  margin: 0;\r\n\r\n  color:\r\n    var(--iptv-muted);\r\n\r\n  font-size:\r\n    13px;\r\n\r\n}\r\n\r\n\r\n\/* PAGINATION *\/\r\n\r\n#iptv-directory .iptv-pagination {\r\n\r\n  width: 100%;\r\n\r\n  display: flex;\r\n\r\n  justify-content: center;\r\n\r\n  align-items: center;\r\n\r\n  flex-wrap: wrap;\r\n\r\n  gap: 7px;\r\n\r\n  margin-top: 28px;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .page-btn {\r\n\r\n  width: 38px;\r\n\r\n  min-width: 38px;\r\n\r\n  height: 38px;\r\n\r\n  padding: 0;\r\n\r\n  border-radius: 8px;\r\n\r\n  border:\r\n    1px solid rgba(255,255,255,.08);\r\n\r\n  background:\r\n    #101720;\r\n\r\n  color:\r\n    #aeb8c5;\r\n\r\n  font-size:\r\n    12px;\r\n\r\n  cursor:\r\n    pointer;\r\n\r\n  transition:\r\n    .2s ease;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .page-btn:hover {\r\n\r\n  border-color:\r\n    rgba(245,184,61,.45);\r\n\r\n  color:\r\n    #ffffff;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .page-btn.active {\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      #f5b83d,\r\n      #ffcf63\r\n    );\r\n\r\n  color:\r\n    #111111;\r\n\r\n  border-color:\r\n    transparent;\r\n\r\n  font-weight:\r\n    800;\r\n\r\n}\r\n\r\n\r\n#iptv-directory .page-arrow {\r\n\r\n  font-size:\r\n    17px;\r\n\r\n}\r\n\r\n\r\n\/* TABLET *\/\r\n\r\n@media (max-width: 1050px) {\r\n\r\n  #iptv-directory .iptv-grid {\r\n\r\n    grid-template-columns:\r\n      repeat(3, minmax(0, 1fr));\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-controls {\r\n\r\n    grid-template-columns:\r\n      minmax(0, 1fr)\r\n      minmax(0, 1fr);\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-search {\r\n\r\n    grid-column:\r\n      1 \/ -1;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory #iptvClear {\r\n\r\n    width: 100%;\r\n\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* MOBILE *\/\r\n\r\n@media (max-width: 700px) {\r\n\r\n  #iptv-directory .iptv-wrap {\r\n\r\n    padding:\r\n      25px 12px 45px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-head {\r\n\r\n    display: block;\r\n\r\n    margin-bottom:\r\n      20px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory h2 {\r\n\r\n    font-size:\r\n      29px;\r\n\r\n    letter-spacing:\r\n      -.5px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-title-box p {\r\n\r\n    font-size:\r\n      12px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-count {\r\n\r\n    display:\r\n      inline-block;\r\n\r\n    margin-top:\r\n      14px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-controls {\r\n\r\n    grid-template-columns:\r\n      1fr;\r\n\r\n    gap:\r\n      9px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-search {\r\n\r\n    grid-column:\r\n      auto;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-grid {\r\n\r\n    grid-template-columns:\r\n      repeat(2, minmax(0, 1fr));\r\n\r\n    gap:\r\n      9px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-card {\r\n\r\n    height:\r\n      94px;\r\n\r\n    padding:\r\n      9px;\r\n\r\n    gap:\r\n      9px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-logo {\r\n\r\n    width:\r\n      49px;\r\n\r\n    height:\r\n      49px;\r\n\r\n    flex-basis:\r\n      49px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-name {\r\n\r\n    font-size:\r\n      11px;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-meta {\r\n\r\n    margin-top:\r\n      4px;\r\n\r\n    font-size:\r\n      9px;\r\n\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* SMALL MOBILE *\/\r\n\r\n@media (max-width: 390px) {\r\n\r\n  #iptv-directory .iptv-grid {\r\n\r\n    grid-template-columns:\r\n      1fr;\r\n\r\n  }\r\n\r\n\r\n  #iptv-directory .iptv-card {\r\n\r\n    height:\r\n      88px;\r\n\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n  \"use strict\";\r\n\r\n\r\n  \/*\r\n   * YOUR CHANNEL DATABASE\r\n   *\/\r\n\r\n  const DATA_URL =\r\n    \"https:\/\/8kiptv.org\/wp-content\/uploads\/2026\/09\/8kiptv-channels-data.json\";\r\n\r\n\r\n  \/*\r\n   * ONLY 60 CHANNELS ARE RENDERED\r\n   * AT ONE TIME\r\n   *\/\r\n\r\n  const PER_PAGE = 60;\r\n\r\n\r\n  \/*\r\n   * ELEMENTS\r\n   *\/\r\n\r\n  const root =\r\n    document.getElementById(\r\n      \"iptv-directory\"\r\n    );\r\n\r\n\r\n  if (!root) return;\r\n\r\n\r\n  const grid =\r\n    root.querySelector(\r\n      \"#iptvGrid\"\r\n    );\r\n\r\n\r\n  const search =\r\n    root.querySelector(\r\n      \"#iptvSearch\"\r\n    );\r\n\r\n\r\n  const category =\r\n    root.querySelector(\r\n      \"#iptvCategory\"\r\n    );\r\n\r\n\r\n  const region =\r\n    root.querySelector(\r\n      \"#iptvRegion\"\r\n    );\r\n\r\n\r\n  const clear =\r\n    root.querySelector(\r\n      \"#iptvClear\"\r\n    );\r\n\r\n\r\n  const pagination =\r\n    root.querySelector(\r\n      \"#iptvPagination\"\r\n    );\r\n\r\n\r\n  const count =\r\n    root.querySelector(\r\n      \"#iptvCount\"\r\n    );\r\n\r\n\r\n  const status =\r\n    root.querySelector(\r\n      \"#iptvStatus\"\r\n    );\r\n\r\n\r\n  const empty =\r\n    root.querySelector(\r\n      \"#iptvEmpty\"\r\n    );\r\n\r\n\r\n  \/*\r\n   * DATA\r\n   *\/\r\n\r\n  let channels = [];\r\n\r\n  let filtered = [];\r\n\r\n  let currentPage = 1;\r\n\r\n\r\n  \/*\r\n   * ESCAPE HTML\r\n   *\/\r\n\r\n  function escapeHTML(value) {\r\n\r\n    return String(value ?? \"\")\r\n      .replace(\r\n        \/&\/g,\r\n        \"&amp;\"\r\n      )\r\n      .replace(\r\n        \/<\/g,\r\n        \"&lt;\"\r\n      )\r\n      .replace(\r\n        \/>\/g,\r\n        \"&gt;\"\r\n      )\r\n      .replace(\r\n        \/\"\/g,\r\n        \"&quot;\"\r\n      )\r\n      .replace(\r\n        \/'\/g,\r\n        \"&#039;\"\r\n      );\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * JSON FORMAT\r\n   *\r\n   * [0] NAME\r\n   * [1] LOGO\r\n   * [2] CATEGORY ID\r\n   * [3] EPG ID\r\n   * [4] STREAM ID\r\n   * [5] ADULT\r\n   * [6] REGION\r\n   *\/\r\n\r\n\r\n  function getName(item) {\r\n\r\n    return (\r\n      item[0] ||\r\n      \"Unknown Channel\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function getLogo(item) {\r\n\r\n    return (\r\n      item[1] ||\r\n      \"\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function getCategory(item) {\r\n\r\n    return String(\r\n      item[2] ?? \"\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function getEPG(item) {\r\n\r\n    return String(\r\n      item[3] ?? \"\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function getStreamId(item) {\r\n\r\n    return String(\r\n      item[4] ?? \"\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function isAdult(item) {\r\n\r\n    return (\r\n      String(\r\n        item[5] ?? \"\"\r\n      ) === \"1\"\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * REGION\r\n   *\r\n   * Use the existing region\r\n   * value from JSON.\r\n   *\r\n   * If missing, detect simple\r\n   * prefixes from channel name.\r\n   *\/\r\n\r\n  function getRegion(item) {\r\n\r\n    if (\r\n      item[6] &&\r\n      String(item[6]).trim()\r\n    ) {\r\n\r\n      return String(\r\n        item[6]\r\n      ).trim();\r\n\r\n    }\r\n\r\n\r\n    const name =\r\n      getName(item);\r\n\r\n\r\n    const match =\r\n      name.match(\r\n        \/^([A-Z0-9]{2,5})\\s*[:|]\\s*\/i\r\n      );\r\n\r\n\r\n    if (match) {\r\n\r\n      return match[1]\r\n        .toUpperCase();\r\n\r\n    }\r\n\r\n\r\n    return \"OTHER\";\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * POPULATE FILTERS\r\n   *\/\r\n\r\n  function populateFilters() {\r\n\r\n    const categories =\r\n      new Set();\r\n\r\n    const regions =\r\n      new Set();\r\n\r\n\r\n    channels.forEach(\r\n      function (item) {\r\n\r\n        const cat =\r\n          getCategory(item);\r\n\r\n        const reg =\r\n          getRegion(item);\r\n\r\n\r\n        if (cat) {\r\n\r\n          categories.add(\r\n            cat\r\n          );\r\n\r\n        }\r\n\r\n\r\n        if (reg) {\r\n\r\n          regions.add(\r\n            reg\r\n          );\r\n\r\n        }\r\n\r\n      }\r\n    );\r\n\r\n\r\n    \/*\r\n     * CATEGORIES\r\n     *\/\r\n\r\n    Array.from(\r\n      categories\r\n    )\r\n      .sort(\r\n        function (a, b) {\r\n\r\n          const na =\r\n            Number(a);\r\n\r\n          const nb =\r\n            Number(b);\r\n\r\n\r\n          if (\r\n            !Number.isNaN(na) &&\r\n            !Number.isNaN(nb)\r\n          ) {\r\n\r\n            return na - nb;\r\n\r\n          }\r\n\r\n\r\n          return String(a)\r\n            .localeCompare(\r\n              String(b)\r\n            );\r\n\r\n        }\r\n      )\r\n      .forEach(\r\n        function (cat) {\r\n\r\n          const option =\r\n            document.createElement(\r\n              \"option\"\r\n            );\r\n\r\n\r\n          option.value =\r\n            cat;\r\n\r\n\r\n          option.textContent =\r\n            \"Category \" + cat;\r\n\r\n\r\n          category.appendChild(\r\n            option\r\n          );\r\n\r\n        }\r\n      );\r\n\r\n\r\n    \/*\r\n     * REGIONS\r\n     *\/\r\n\r\n    Array.from(\r\n      regions\r\n    )\r\n      .sort()\r\n      .forEach(\r\n        function (reg) {\r\n\r\n          const option =\r\n            document.createElement(\r\n              \"option\"\r\n            );\r\n\r\n\r\n          option.value =\r\n            reg;\r\n\r\n\r\n          option.textContent =\r\n            reg;\r\n\r\n\r\n          region.appendChild(\r\n            option\r\n          );\r\n\r\n        }\r\n      );\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * FILTER\r\n   *\/\r\n\r\n  function applyFilters() {\r\n\r\n    const term =\r\n      search.value\r\n        .trim()\r\n        .toLowerCase();\r\n\r\n\r\n    const selectedCategory =\r\n      category.value;\r\n\r\n\r\n    const selectedRegion =\r\n      region.value;\r\n\r\n\r\n    \/*\r\n     * No filters\r\n     *\/\r\n\r\n    if (\r\n      !term &&\r\n      !selectedCategory &&\r\n      !selectedRegion\r\n    ) {\r\n\r\n      filtered =\r\n        channels.slice();\r\n\r\n    }\r\n\r\n    else {\r\n\r\n      filtered =\r\n        channels.filter(\r\n          function (item) {\r\n\r\n            const name =\r\n              getName(item)\r\n                .toLowerCase();\r\n\r\n\r\n            const streamId =\r\n              getStreamId(item);\r\n\r\n\r\n            const cat =\r\n              getCategory(item);\r\n\r\n\r\n            const reg =\r\n              getRegion(item);\r\n\r\n\r\n            const searchMatch =\r\n              !term ||\r\n              name.includes(term) ||\r\n              streamId.includes(term);\r\n\r\n\r\n            const categoryMatch =\r\n              !selectedCategory ||\r\n              cat === selectedCategory;\r\n\r\n\r\n            const regionMatch =\r\n              !selectedRegion ||\r\n              reg === selectedRegion;\r\n\r\n\r\n            return (\r\n              searchMatch &&\r\n              categoryMatch &&\r\n              regionMatch\r\n            );\r\n\r\n          }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    currentPage = 1;\r\n\r\n\r\n    render();\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * RENDER\r\n   *\/\r\n\r\n  function render() {\r\n\r\n    const total =\r\n      filtered.length;\r\n\r\n\r\n    count.textContent =\r\n      total.toLocaleString() +\r\n      \" channels\";\r\n\r\n\r\n    \/*\r\n     * EMPTY\r\n     *\/\r\n\r\n    if (!total) {\r\n\r\n      grid.innerHTML =\r\n        \"\";\r\n\r\n      pagination.innerHTML =\r\n        \"\";\r\n\r\n      empty.classList.add(\r\n        \"show\"\r\n      );\r\n\r\n      status.textContent =\r\n        \"No channels found.\";\r\n\r\n      return;\r\n\r\n    }\r\n\r\n\r\n    empty.classList.remove(\r\n      \"show\"\r\n    );\r\n\r\n\r\n    \/*\r\n     * PAGES\r\n     *\/\r\n\r\n    const totalPages =\r\n      Math.ceil(\r\n        total \/ PER_PAGE\r\n      );\r\n\r\n\r\n    if (\r\n      currentPage >\r\n      totalPages\r\n    ) {\r\n\r\n      currentPage =\r\n        totalPages;\r\n\r\n    }\r\n\r\n\r\n    const start =\r\n      (\r\n        currentPage - 1\r\n      ) * PER_PAGE;\r\n\r\n\r\n    const end =\r\n      Math.min(\r\n        start + PER_PAGE,\r\n        total\r\n      );\r\n\r\n\r\n    \/*\r\n     * ONLY 60 ARE RENDERED\r\n     *\/\r\n\r\n    const visible =\r\n      filtered.slice(\r\n        start,\r\n        end\r\n      );\r\n\r\n\r\n    \/*\r\n     * CREATE CARDS\r\n     *\/\r\n\r\n    grid.innerHTML =\r\n      visible.map(\r\n        function (item) {\r\n\r\n          const name =\r\n            getName(item);\r\n\r\n\r\n          const logo =\r\n            getLogo(item);\r\n\r\n\r\n          const cat =\r\n            getCategory(item);\r\n\r\n\r\n          const epg =\r\n            getEPG(item);\r\n\r\n\r\n          const id =\r\n            getStreamId(item);\r\n\r\n\r\n          const adult =\r\n            isAdult(item);\r\n\r\n\r\n          let meta = \"\";\r\n\r\n\r\n          if (cat) {\r\n\r\n            meta +=\r\n              \"Category \" +\r\n              escapeHTML(cat);\r\n\r\n          }\r\n\r\n\r\n          if (id) {\r\n\r\n            if (meta) {\r\n              meta += \" \u2022 \";\r\n            }\r\n\r\n            meta +=\r\n              \"ID \" +\r\n              escapeHTML(id);\r\n\r\n          }\r\n\r\n\r\n          if (adult) {\r\n\r\n            if (meta) {\r\n              meta += \" \u2022 \";\r\n            }\r\n\r\n            meta += \"18+\";\r\n\r\n          }\r\n\r\n\r\n          let logoHTML =\r\n            \"\";\r\n\r\n\r\n          if (logo) {\r\n\r\n            logoHTML = `\r\n\r\n              <img\r\n                src=\"${escapeHTML(logo)}\"\r\n                alt=\"${escapeHTML(name)}\"\r\n                loading=\"lazy\"\r\n                decoding=\"async\"\r\n                referrerpolicy=\"no-referrer\"\r\n                onerror=\"\r\n                  this.style.display='none';\r\n                \"\r\n              >\r\n\r\n            `;\r\n\r\n          }\r\n\r\n\r\n          return `\r\n\r\n            <div class=\"iptv-card\">\r\n\r\n              <div class=\"iptv-logo\">\r\n\r\n                ${logoHTML}\r\n\r\n              <\/div>\r\n\r\n\r\n              <div class=\"iptv-info\">\r\n\r\n                <div class=\"iptv-name\">\r\n\r\n                  ${escapeHTML(name)}\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"iptv-meta\">\r\n\r\n                  ${meta}\r\n\r\n                <\/div>\r\n\r\n              <\/div>\r\n\r\n            <\/div>\r\n\r\n          `;\r\n\r\n        }\r\n      ).join(\"\");\r\n\r\n\r\n    \/*\r\n     * STATUS\r\n     *\/\r\n\r\n    status.textContent =\r\n      \"Showing \" +\r\n      (\r\n        start + 1\r\n      ).toLocaleString() +\r\n      \"\u2013\" +\r\n      end.toLocaleString() +\r\n      \" of \" +\r\n      total.toLocaleString();\r\n\r\n\r\n    \/*\r\n     * PAGINATION\r\n     *\/\r\n\r\n    renderPagination(\r\n      totalPages\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * PAGINATION\r\n   *\/\r\n\r\n  function renderPagination(\r\n    totalPages\r\n  ) {\r\n\r\n    pagination.innerHTML =\r\n      \"\";\r\n\r\n\r\n    if (\r\n      totalPages <= 1\r\n    ) {\r\n\r\n      return;\r\n\r\n    }\r\n\r\n\r\n    function addButton(\r\n      label,\r\n      page,\r\n      active\r\n    ) {\r\n\r\n      const button =\r\n        document.createElement(\r\n          \"button\"\r\n        );\r\n\r\n\r\n      button.type =\r\n        \"button\";\r\n\r\n\r\n      button.className =\r\n        \"page-btn\" +\r\n        (\r\n          active\r\n            ? \" active\"\r\n            : \"\"\r\n        );\r\n\r\n\r\n      button.textContent =\r\n        label;\r\n\r\n\r\n      button.addEventListener(\r\n        \"click\",\r\n        function () {\r\n\r\n          if (\r\n            page < 1 ||\r\n            page > totalPages ||\r\n            page === currentPage\r\n          ) {\r\n\r\n            return;\r\n\r\n          }\r\n\r\n\r\n          currentPage =\r\n            page;\r\n\r\n\r\n          render();\r\n\r\n\r\n          \/*\r\n           * Scroll only a little\r\n           * so user stays near directory\r\n           *\/\r\n\r\n          const top =\r\n            root.getBoundingClientRect()\r\n              .top +\r\n            window.pageYOffset -\r\n            80;\r\n\r\n\r\n          window.scrollTo({\r\n            top: top,\r\n            behavior: \"smooth\"\r\n          });\r\n\r\n        }\r\n      );\r\n\r\n\r\n      pagination.appendChild(\r\n        button\r\n      );\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * PREVIOUS\r\n     *\/\r\n\r\n    addButton(\r\n      \"\u2039\",\r\n      currentPage - 1,\r\n      false\r\n    );\r\n\r\n\r\n    \/*\r\n     * PAGE RANGE\r\n     *\/\r\n\r\n    let startPage =\r\n      Math.max(\r\n        1,\r\n        currentPage - 2\r\n      );\r\n\r\n\r\n    let endPage =\r\n      Math.min(\r\n        totalPages,\r\n        currentPage + 2\r\n      );\r\n\r\n\r\n    if (\r\n      currentPage <= 3\r\n    ) {\r\n\r\n      endPage =\r\n        Math.min(\r\n          5,\r\n          totalPages\r\n        );\r\n\r\n    }\r\n\r\n\r\n    if (\r\n      currentPage >=\r\n      totalPages - 2\r\n    ) {\r\n\r\n      startPage =\r\n        Math.max(\r\n          1,\r\n          totalPages - 4\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * FIRST PAGE\r\n     *\/\r\n\r\n    if (\r\n      startPage > 1\r\n    ) {\r\n\r\n      addButton(\r\n        \"1\",\r\n        1,\r\n        currentPage === 1\r\n      );\r\n\r\n\r\n      if (\r\n        startPage > 2\r\n      ) {\r\n\r\n        const dots =\r\n          document.createElement(\r\n            \"span\"\r\n          );\r\n\r\n\r\n        dots.textContent =\r\n          \"\u2026\";\r\n\r\n\r\n        dots.style.color =\r\n          \"#697586\";\r\n\r\n\r\n        dots.style.padding =\r\n          \"0 3px\";\r\n\r\n\r\n        pagination.appendChild(\r\n          dots\r\n        );\r\n\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * PAGES\r\n     *\/\r\n\r\n    for (\r\n      let page = startPage;\r\n      page <= endPage;\r\n      page++\r\n    ) {\r\n\r\n      addButton(\r\n        String(page),\r\n        page,\r\n        page === currentPage\r\n      );\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * LAST PAGE\r\n     *\/\r\n\r\n    if (\r\n      endPage < totalPages\r\n    ) {\r\n\r\n      if (\r\n        endPage <\r\n        totalPages - 1\r\n      ) {\r\n\r\n        const dots =\r\n          document.createElement(\r\n            \"span\"\r\n          );\r\n\r\n\r\n        dots.textContent =\r\n          \"\u2026\";\r\n\r\n\r\n        dots.style.color =\r\n          \"#697586\";\r\n\r\n\r\n        dots.style.padding =\r\n          \"0 3px\";\r\n\r\n\r\n        pagination.appendChild(\r\n          dots\r\n        );\r\n\r\n      }\r\n\r\n\r\n      addButton(\r\n        String(totalPages),\r\n        totalPages,\r\n        currentPage === totalPages\r\n      );\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * NEXT\r\n     *\/\r\n\r\n    addButton(\r\n      \"\u203a\",\r\n      currentPage + 1,\r\n      false\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * CLEAR\r\n   *\/\r\n\r\n  function clearFilters() {\r\n\r\n    search.value =\r\n      \"\";\r\n\r\n    category.value =\r\n      \"\";\r\n\r\n    region.value =\r\n      \"\";\r\n\r\n\r\n    filtered =\r\n      channels.slice();\r\n\r\n\r\n    currentPage =\r\n      1;\r\n\r\n\r\n    render();\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * LOAD JSON\r\n   *\/\r\n\r\n  async function loadChannels() {\r\n\r\n    try {\r\n\r\n      status.textContent =\r\n        \"Loading 57,147 channel database...\";\r\n\r\n\r\n      const response =\r\n        await fetch(\r\n          DATA_URL,\r\n          {\r\n            method: \"GET\",\r\n            cache: \"force-cache\"\r\n          }\r\n        );\r\n\r\n\r\n      if (\r\n        !response.ok\r\n      ) {\r\n\r\n        throw new Error(\r\n          \"HTTP \" +\r\n          response.status\r\n        );\r\n\r\n      }\r\n\r\n\r\n      const data =\r\n        await response.json();\r\n\r\n\r\n      \/*\r\n       * JSON MUST BE ARRAY\r\n       *\/\r\n\r\n      if (\r\n        !Array.isArray(data)\r\n      ) {\r\n\r\n        throw new Error(\r\n          \"Invalid JSON format\"\r\n        );\r\n\r\n      }\r\n\r\n\r\n      \/*\r\n       * KEEP ONLY VALID ARRAY RECORDS\r\n       *\/\r\n\r\n      channels =\r\n        data.filter(\r\n          function (item) {\r\n\r\n            return (\r\n              Array.isArray(item) &&\r\n              item.length >= 5\r\n            );\r\n\r\n          }\r\n        );\r\n\r\n\r\n      \/*\r\n       * INITIAL DATA\r\n       *\/\r\n\r\n      filtered =\r\n        channels.slice();\r\n\r\n\r\n      \/*\r\n       * FILTERS\r\n       *\/\r\n\r\n      populateFilters();\r\n\r\n\r\n      \/*\r\n       * COUNT\r\n       *\/\r\n\r\n      count.textContent =\r\n        channels.length.toLocaleString() +\r\n        \" channels\";\r\n\r\n\r\n      \/*\r\n       * RENDER\r\n       *\/\r\n\r\n      render();\r\n\r\n    }\r\n\r\n    catch (error) {\r\n\r\n      console.error(\r\n        \"8K IPTV Directory:\",\r\n        error\r\n      );\r\n\r\n\r\n      count.textContent =\r\n        \"Error\";\r\n\r\n\r\n      status.textContent =\r\n        \"Unable to load channel database.\";\r\n\r\n\r\n      grid.innerHTML =\r\n        \"\";\r\n\r\n\r\n      empty.classList.add(\r\n        \"show\"\r\n      );\r\n\r\n\r\n      const title =\r\n        empty.querySelector(\r\n          \"h3\"\r\n        );\r\n\r\n\r\n      const text =\r\n        empty.querySelector(\r\n          \"p\"\r\n        );\r\n\r\n\r\n      if (title) {\r\n\r\n        title.textContent =\r\n          \"Channel database unavailable\";\r\n\r\n      }\r\n\r\n\r\n      if (text) {\r\n\r\n        text.textContent =\r\n          \"Please refresh the page and try again.\";\r\n\r\n      }\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/*\r\n   * SEARCH DEBOUNCE\r\n   *\/\r\n\r\n  let searchTimer =\r\n    null;\r\n\r\n\r\n  search.addEventListener(\r\n    \"input\",\r\n    function () {\r\n\r\n      clearTimeout(\r\n        searchTimer\r\n      );\r\n\r\n\r\n      searchTimer =\r\n        setTimeout(\r\n          function () {\r\n\r\n            applyFilters();\r\n\r\n          },\r\n          200\r\n        );\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/*\r\n   * CATEGORY\r\n   *\/\r\n\r\n  category.addEventListener(\r\n    \"change\",\r\n    function () {\r\n\r\n      applyFilters();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/*\r\n   * REGION\r\n   *\/\r\n\r\n  region.addEventListener(\r\n    \"change\",\r\n    function () {\r\n\r\n      applyFilters();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/*\r\n   * CLEAR\r\n   *\/\r\n\r\n  clear.addEventListener(\r\n    \"click\",\r\n    function () {\r\n\r\n      clearFilters();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/*\r\n   * START\r\n   *\/\r\n\r\n  loadChannels();\r\n\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8fdc5b2 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"8fdc5b2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a4084dd elementor-widget elementor-widget-text-editor\" data-id=\"a4084dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"PDq2pG_selectionAnchorContainer\" data-start=\"107\" data-end=\"268\"><span style=\"color: #ffffff;\"><strong><code data-start=\"131\" data-end=\"268\">Explore the 8K IPTV Channels List with 50,000+ live TV channels, sports, news, movies and international entertainment in HD, 4K and 8K.<\/code><\/strong><\/span><\/h4><p data-start=\"270\" data-end=\"314\">\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4786e0c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"4786e0c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8187a6e elementor-widget elementor-widget-button\" data-id=\"8187a6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/8kiptv.org\/home\/8k-iptv-subscription-free-trial-24h\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">FREE TRIAL<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>8K IPTV Channels List \u2013 50,000+ Live TV Channels 8K IPTV CHANNEL DIRECTORY Live TV Channels Browse thousands of live TV channels from around the world. Loading&#8230; \u2315 All Categories All Regions Clear Loading channel database&#8230; \u2315 No channels found Try another search or filter. Explore the 8K IPTV Channels List with 50,000+ live TV channels, sports, news, movies and international entertainment in HD, 4K and 8K. \u00a0 FREE TRIAL<\/p>\n","protected":false},"author":1,"featured_media":2453,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2346","page","type-page","status-publish","has-post-thumbnail","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/pages\/2346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/comments?post=2346"}],"version-history":[{"count":91,"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/pages\/2346\/revisions"}],"predecessor-version":[{"id":5559,"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/pages\/2346\/revisions\/5559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/media\/2453"}],"wp:attachment":[{"href":"https:\/\/8kiptv.org\/tv\/wp-json\/wp\/v2\/media?parent=2346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}