diff --git a/SITES.md b/SITES.md
index 952125117..b96595c45 100644
--- a/SITES.md
+++ b/SITES.md
@@ -85,7 +85,7 @@
| iltalehti.fi | 147 | 🟢 | |
| ionplustv.com | 1 | 🟢 | |
| ipko.tv | 201 | 🟢 | |
- | jiotv.com | 1094 | 🟢 | |
+ | jiotv.com | 1094 | 🟢 | https://github.com/iptv-org/epg/issues/3216 |
| knr.gl | 1 | 🟢 | |
| kvf.fo | 1 | 🟢 | |
| m.tv.sms.cz | 1027 | 🟢 | |
@@ -119,13 +119,13 @@
| nhl.com | 1 | 🟢 | |
| nostv.pt | 161 | 🟢 | |
| novasports.gr | 16 | 🟢 | |
- | nowplayer.now.com | 140 | 🟢 | |
+ | nowplayer.now.com | 130 | 🟢 | |
| nuevosiglo.com.uy | 173 | 🟢 | |
| nzxmltv.com | 532 | 🟢 | |
| ontvtonight.com | 17478 | 🟢 | |
| opto.sic.pt | 3 | 🟢 | |
| orangetv.orange.es | 227 | 🟢 | |
- | osn.com | 79 | 🟢 | |
+ | osn.com | 80 | 🟢 | |
| passie.nl | 1 | 🟢 | |
| pbsguam.org | 1 | 🟢 | |
| pickx.be | 404 | 🟢 | |
@@ -181,7 +181,7 @@
| thesportplus.com | 3 | 🟢 | |
| tivie.id | 55 | 🟢 | |
| tivu.tv | 80 | 🟢 | |
- | toonamiaftermath.com | 1 | 🟢 | |
+ | toonamiaftermath.com | 4 | 🟢 | |
| turksatkablo.com.tr | 177 | 🟢 | |
| tv-programme.telecablesat.fr | 268 | 🟢 | |
| tv-spored.siol.net | 312 | 🟢 | |
diff --git a/sites/nowplayer.now.com/__data__/content.json b/sites/nowplayer.now.com/__data__/content.json
index eafb20207..9444e0fe9 100644
--- a/sites/nowplayer.now.com/__data__/content.json
+++ b/sites/nowplayer.now.com/__data__/content.json
@@ -1 +1,1033 @@
-[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]
\ No newline at end of file
+[
+ [
+ {
+ "key": "key_202606244351477",
+ "vimProgramId": "202606244351477",
+ "name": "Ragna Crimson S1E2 -The Beginning Of The Story",
+ "start": 1783785600000,
+ "end": 1783787400000,
+ "date": "20260712",
+ "startTime": "12:00AM",
+ "endTime": "12:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783787400000,
+ "npvrStartTime": 1783785600000,
+ "cid": "ragna crimsons1e2the beginning of the story",
+ "sid": "ragna crimsons1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351478",
+ "vimProgramId": "202606244351478",
+ "name": "Ragna Crimson S1E3 -Instigation",
+ "start": 1783787400000,
+ "end": 1783789200000,
+ "date": "20260712",
+ "startTime": "12:30AM",
+ "endTime": "01:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783789200000,
+ "npvrStartTime": 1783787400000,
+ "cid": "ragna crimsons1e3instigation",
+ "sid": "ragna crimsons1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351479",
+ "vimProgramId": "202606244351479",
+ "name": "Ragna Crimson S1E4 -Carrying Out The Plan",
+ "start": 1783789200000,
+ "end": 1783791000000,
+ "date": "20260712",
+ "startTime": "01:00AM",
+ "endTime": "01:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783791000000,
+ "npvrStartTime": 1783789200000,
+ "cid": "ragna crimsons1e4carrying out the plan",
+ "sid": "ragna crimsons1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351480",
+ "vimProgramId": "202606244351480",
+ "name": "Ragna Crimson S1E5 -Wing",
+ "start": 1783791000000,
+ "end": 1783792800000,
+ "date": "20260712",
+ "startTime": "01:30AM",
+ "endTime": "02:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783792800000,
+ "npvrStartTime": 1783791000000,
+ "cid": "ragna crimsons1e5wing",
+ "sid": "ragna crimsons1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351481",
+ "vimProgramId": "202606244351481",
+ "name": "Black Clover S1E10 -To Protect Someone",
+ "start": 1783792800000,
+ "end": 1783794600000,
+ "date": "20260712",
+ "startTime": "02:00AM",
+ "endTime": "02:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783794600000,
+ "npvrStartTime": 1783792800000,
+ "cid": "black clovers1e10to protect someone",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351482",
+ "vimProgramId": "202606244351482",
+ "name": "Black Clover S1E11 -What Happened One Day In The Castle Town",
+ "start": 1783794600000,
+ "end": 1783796400000,
+ "date": "20260712",
+ "startTime": "02:30AM",
+ "endTime": "03:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783796400000,
+ "npvrStartTime": 1783794600000,
+ "cid": "black clovers1e11what happened one day in the castle town",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351483",
+ "vimProgramId": "202606244351483",
+ "name": "Black Clover S1E12 -The Wizard King Saw",
+ "start": 1783796400000,
+ "end": 1783798200000,
+ "date": "20260712",
+ "startTime": "03:00AM",
+ "endTime": "03:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783798200000,
+ "npvrStartTime": 1783796400000,
+ "cid": "black clovers1e12the wizard king saw",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351484",
+ "vimProgramId": "202606244351484",
+ "name": "Oshi No Ko S1E3 -Manga-Based TV Drama",
+ "start": 1783798200000,
+ "end": 1783800000000,
+ "date": "20260712",
+ "startTime": "03:30AM",
+ "endTime": "04:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783800000000,
+ "npvrStartTime": 1783798200000,
+ "cid": "oshi no kos1e3manga-based tv drama",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351485",
+ "vimProgramId": "202606244351485",
+ "name": "Oshi No Ko S1E4 -Actors",
+ "start": 1783800000000,
+ "end": 1783801800000,
+ "date": "20260712",
+ "startTime": "04:00AM",
+ "endTime": "04:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783801800000,
+ "npvrStartTime": 1783800000000,
+ "cid": "oshi no kos1e4actors",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351486",
+ "vimProgramId": "202606244351486",
+ "name": "Unnamed Memory S2E13 -From A Blank Page Anew",
+ "start": 1783801800000,
+ "end": 1783803600000,
+ "date": "20260712",
+ "startTime": "04:30AM",
+ "endTime": "05:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783803600000,
+ "npvrStartTime": 1783801800000,
+ "cid": "unnamed memorys2e13from a blank page anew",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351487",
+ "vimProgramId": "202606244351487",
+ "name": "Unnamed Memory S2E14 -Emerging From A Glass Cocoon",
+ "start": 1783803600000,
+ "end": 1783805400000,
+ "date": "20260712",
+ "startTime": "05:00AM",
+ "endTime": "05:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783805400000,
+ "npvrStartTime": 1783803600000,
+ "cid": "unnamed memorys2e14emerging from a glass cocoon",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351488",
+ "vimProgramId": "202606244351488",
+ "name": "Unnamed Memory S2E15 -Unanswered Prayer",
+ "start": 1783805400000,
+ "end": 1783807200000,
+ "date": "20260712",
+ "startTime": "05:30AM",
+ "endTime": "06:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783807200000,
+ "npvrStartTime": 1783805400000,
+ "cid": "unnamed memorys2e15unanswered prayer",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351489",
+ "vimProgramId": "202606244351489",
+ "name": "Fruits Basket S2E23 -It's Cinderella-Ish",
+ "start": 1783807200000,
+ "end": 1783809000000,
+ "date": "20260712",
+ "startTime": "06:00AM",
+ "endTime": "06:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783809000000,
+ "npvrStartTime": 1783807200000,
+ "cid": "fruits baskets2e23it's cinderella-ish",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351490",
+ "vimProgramId": "202606244351490",
+ "name": "Fruits Basket S2E24 -Here You Are",
+ "start": 1783809000000,
+ "end": 1783810800000,
+ "date": "20260712",
+ "startTime": "06:30AM",
+ "endTime": "07:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783810800000,
+ "npvrStartTime": 1783809000000,
+ "cid": "fruits baskets2e24here you are",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351491",
+ "vimProgramId": "202606244351491",
+ "name": "Fruits Basket S2E25 -I'm Different Now",
+ "start": 1783810800000,
+ "end": 1783812600000,
+ "date": "20260712",
+ "startTime": "07:00AM",
+ "endTime": "07:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783812600000,
+ "npvrStartTime": 1783810800000,
+ "cid": "fruits baskets2e25i'm different now",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351492",
+ "vimProgramId": "202606244351492",
+ "name": "Black Clover S1E10 -To Protect Someone",
+ "start": 1783812600000,
+ "end": 1783814400000,
+ "date": "20260712",
+ "startTime": "07:30AM",
+ "endTime": "08:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783814400000,
+ "npvrStartTime": 1783812600000,
+ "cid": "black clovers1e10to protect someone",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351493",
+ "vimProgramId": "202606244351493",
+ "name": "Black Clover S1E11 -What Happened One Day In The Castle Town",
+ "start": 1783814400000,
+ "end": 1783816200000,
+ "date": "20260712",
+ "startTime": "08:00AM",
+ "endTime": "08:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783816200000,
+ "npvrStartTime": 1783814400000,
+ "cid": "black clovers1e11what happened one day in the castle town",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351494",
+ "vimProgramId": "202606244351494",
+ "name": "Black Clover S1E12 -The Wizard King Saw",
+ "start": 1783816200000,
+ "end": 1783818000000,
+ "date": "20260712",
+ "startTime": "08:30AM",
+ "endTime": "09:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783818000000,
+ "npvrStartTime": 1783816200000,
+ "cid": "black clovers1e12the wizard king saw",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351495",
+ "vimProgramId": "202606244351495",
+ "name": "One Piece: Marineford Arc S1E3 -The Beginning Of The War! Ace And Whitebeard's Past!",
+ "start": 1783818000000,
+ "end": 1783819800000,
+ "date": "20260712",
+ "startTime": "09:00AM",
+ "endTime": "09:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783819800000,
+ "npvrStartTime": 1783818000000,
+ "cid": "one piece: marineford arcs1e3the beginning of the war! ace and whitebeard's past!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351496",
+ "vimProgramId": "202606244351496",
+ "name": "One Piece: Marineford Arc S1E4 -The Force That Could Destroy The World! The Power Of The Tremor-Tremor Frui",
+ "start": 1783819800000,
+ "end": 1783821600000,
+ "date": "20260712",
+ "startTime": "09:30AM",
+ "endTime": "10:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783821600000,
+ "npvrStartTime": 1783819800000,
+ "cid": "one piece: marineford arcs1e4the force that could destroy the world! the power of the tremor-tremor frui",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351497",
+ "vimProgramId": "202606244351497",
+ "name": "One Piece: Marineford Arc S1E5 -An All-Encompassing Inferno!! Admiral Akainu's Power!",
+ "start": 1783821600000,
+ "end": 1783823400000,
+ "date": "20260712",
+ "startTime": "10:00AM",
+ "endTime": "10:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783823400000,
+ "npvrStartTime": 1783821600000,
+ "cid": "one piece: marineford arcs1e5an all-encompassing inferno!! admiral akainu's power!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351498",
+ "vimProgramId": "202606244351498",
+ "name": "One Piece: Marineford Arc S1E6 -A Descendant Of The Beast! Little Oars Jr. Full Speed Ahead!",
+ "start": 1783823400000,
+ "end": 1783825200000,
+ "date": "20260712",
+ "startTime": "10:30AM",
+ "endTime": "11:00AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783825200000,
+ "npvrStartTime": 1783823400000,
+ "cid": "one piece: marineford arcs1e6a descendant of the beast! little oars jr. full speed ahead!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351499",
+ "vimProgramId": "202606244351499",
+ "name": "Oshi No Ko S1E3 -Manga-Based TV Drama",
+ "start": 1783825200000,
+ "end": 1783827000000,
+ "date": "20260712",
+ "startTime": "11:00AM",
+ "endTime": "11:30AM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783827000000,
+ "npvrStartTime": 1783825200000,
+ "cid": "oshi no kos1e3manga-based tv drama",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351500",
+ "vimProgramId": "202606244351500",
+ "name": "Oshi No Ko S1E4 -Actors",
+ "start": 1783827000000,
+ "end": 1783828800000,
+ "date": "20260712",
+ "startTime": "11:30AM",
+ "endTime": "12:00PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783828800000,
+ "npvrStartTime": 1783827000000,
+ "cid": "oshi no kos1e4actors",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351501",
+ "vimProgramId": "202606244351501",
+ "name": "Unnamed Memory S2E13 -From A Blank Page Anew",
+ "start": 1783828800000,
+ "end": 1783830600000,
+ "date": "20260712",
+ "startTime": "12:00PM",
+ "endTime": "12:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783830600000,
+ "npvrStartTime": 1783828800000,
+ "cid": "unnamed memorys2e13from a blank page anew",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351502",
+ "vimProgramId": "202606244351502",
+ "name": "Unnamed Memory S2E14 -Emerging From A Glass Cocoon",
+ "start": 1783830600000,
+ "end": 1783832400000,
+ "date": "20260712",
+ "startTime": "12:30PM",
+ "endTime": "01:00PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783832400000,
+ "npvrStartTime": 1783830600000,
+ "cid": "unnamed memorys2e14emerging from a glass cocoon",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351503",
+ "vimProgramId": "202606244351503",
+ "name": "Unnamed Memory S2E15 -Unanswered Prayer",
+ "start": 1783832400000,
+ "end": 1783834200000,
+ "date": "20260712",
+ "startTime": "01:00PM",
+ "endTime": "01:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783834200000,
+ "npvrStartTime": 1783832400000,
+ "cid": "unnamed memorys2e15unanswered prayer",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351504",
+ "vimProgramId": "202606244351504",
+ "name": "One Piece: Marineford Arc S1E3 -The Beginning Of The War! Ace And Whitebeard's Past!",
+ "start": 1783834200000,
+ "end": 1783836000000,
+ "date": "20260712",
+ "startTime": "01:30PM",
+ "endTime": "02:00PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783836000000,
+ "npvrStartTime": 1783834200000,
+ "cid": "one piece: marineford arcs1e3the beginning of the war! ace and whitebeard's past!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351505",
+ "vimProgramId": "202606244351505",
+ "name": "One Piece: Marineford Arc S1E4 -The Force That Could Destroy The World! The Power Of The Tremor-Tremor Frui",
+ "start": 1783836000000,
+ "end": 1783837800000,
+ "date": "20260712",
+ "startTime": "02:00PM",
+ "endTime": "02:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783837800000,
+ "npvrStartTime": 1783836000000,
+ "cid": "one piece: marineford arcs1e4the force that could destroy the world! the power of the tremor-tremor frui",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351506",
+ "vimProgramId": "202606244351506",
+ "name": "One Piece: Marineford Arc S1E5 -An All-Encompassing Inferno!! Admiral Akainu's Power!",
+ "start": 1783837800000,
+ "end": 1783839600000,
+ "date": "20260712",
+ "startTime": "02:30PM",
+ "endTime": "03:00PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783839600000,
+ "npvrStartTime": 1783837800000,
+ "cid": "one piece: marineford arcs1e5an all-encompassing inferno!! admiral akainu's power!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351507",
+ "vimProgramId": "202606244351507",
+ "name": "One Piece: Marineford Arc S1E6 -A Descendant Of The Beast! Little Oars Jr. Full Speed Ahead!",
+ "start": 1783839600000,
+ "end": 1783841400000,
+ "date": "20260712",
+ "startTime": "03:00PM",
+ "endTime": "03:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783841400000,
+ "npvrStartTime": 1783839600000,
+ "cid": "one piece: marineford arcs1e6a descendant of the beast! little oars jr. full speed ahead!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351508",
+ "vimProgramId": "202606244351508",
+ "name": "Black Clover S1E10 -To Protect Someone",
+ "start": 1783841400000,
+ "end": 1783843080000,
+ "date": "20260712",
+ "startTime": "03:30PM",
+ "endTime": "03:58PM",
+ "duration": 28,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783843080000,
+ "npvrStartTime": 1783841400000,
+ "cid": "black clovers1e10to protect someone",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351509",
+ "vimProgramId": "202606244351509",
+ "name": "Black Clover S1E11 -What Happened One Day In The Castle Town",
+ "start": 1783843080000,
+ "end": 1783844880000,
+ "date": "20260712",
+ "startTime": "03:58PM",
+ "endTime": "04:28PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783844880000,
+ "npvrStartTime": 1783843080000,
+ "cid": "black clovers1e11what happened one day in the castle town",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351510",
+ "vimProgramId": "202606244351510",
+ "name": "Black Clover S1E12 -The Wizard King Saw",
+ "start": 1783844880000,
+ "end": 1783846800000,
+ "date": "20260712",
+ "startTime": "04:28PM",
+ "endTime": "05:00PM",
+ "duration": 32,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783846800000,
+ "npvrStartTime": 1783844880000,
+ "cid": "black clovers1e12the wizard king saw",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351511",
+ "vimProgramId": "202606244351511",
+ "name": "Oshi No Ko S1E3 -Manga-Based TV Drama",
+ "start": 1783846800000,
+ "end": 1783848600000,
+ "date": "20260712",
+ "startTime": "05:00PM",
+ "endTime": "05:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783848600000,
+ "npvrStartTime": 1783846800000,
+ "cid": "oshi no kos1e3manga-based tv drama",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351512",
+ "vimProgramId": "202606244351512",
+ "name": "Oshi No Ko S1E4 -Actors",
+ "start": 1783848600000,
+ "end": 1783850400000,
+ "date": "20260712",
+ "startTime": "05:30PM",
+ "endTime": "06:00PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783850400000,
+ "npvrStartTime": 1783848600000,
+ "cid": "oshi no kos1e4actors",
+ "sid": "oshi no kos1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351513",
+ "vimProgramId": "202606244351513",
+ "name": "Unnamed Memory S2E13 -From A Blank Page Anew",
+ "start": 1783850400000,
+ "end": 1783852080000,
+ "date": "20260712",
+ "startTime": "06:00PM",
+ "endTime": "06:28PM",
+ "duration": 28,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783852080000,
+ "npvrStartTime": 1783850400000,
+ "cid": "unnamed memorys2e13from a blank page anew",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351514",
+ "vimProgramId": "202606244351514",
+ "name": "Unnamed Memory S2E14 -Emerging From A Glass Cocoon",
+ "start": 1783852080000,
+ "end": 1783853880000,
+ "date": "20260712",
+ "startTime": "06:28PM",
+ "endTime": "06:58PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783853880000,
+ "npvrStartTime": 1783852080000,
+ "cid": "unnamed memorys2e14emerging from a glass cocoon",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351515",
+ "vimProgramId": "202606244351515",
+ "name": "Unnamed Memory S2E15 -Unanswered Prayer",
+ "start": 1783853880000,
+ "end": 1783855800000,
+ "date": "20260712",
+ "startTime": "06:58PM",
+ "endTime": "07:30PM",
+ "duration": 32,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783855800000,
+ "npvrStartTime": 1783853880000,
+ "cid": "unnamed memorys2e15unanswered prayer",
+ "sid": "unnamed memorys2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351516",
+ "vimProgramId": "202606244351516",
+ "name": "Black Clover S1E10 -To Protect Someone",
+ "start": 1783855800000,
+ "end": 1783857480000,
+ "date": "20260712",
+ "startTime": "07:30PM",
+ "endTime": "07:58PM",
+ "duration": 28,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783857480000,
+ "npvrStartTime": 1783855800000,
+ "cid": "black clovers1e10to protect someone",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351517",
+ "vimProgramId": "202606244351517",
+ "name": "Black Clover S1E11 -What Happened One Day In The Castle Town",
+ "start": 1783857480000,
+ "end": 1783859280000,
+ "date": "20260712",
+ "startTime": "07:58PM",
+ "endTime": "08:28PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783859280000,
+ "npvrStartTime": 1783857480000,
+ "cid": "black clovers1e11what happened one day in the castle town",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351518",
+ "vimProgramId": "202606244351518",
+ "name": "Black Clover S1E12 -The Wizard King Saw",
+ "start": 1783859280000,
+ "end": 1783861200000,
+ "date": "20260712",
+ "startTime": "08:28PM",
+ "endTime": "09:00PM",
+ "duration": 32,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783861200000,
+ "npvrStartTime": 1783859280000,
+ "cid": "black clovers1e12the wizard king saw",
+ "sid": "black clovers1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351519",
+ "vimProgramId": "202606244351519",
+ "name": "One Piece: Marineford Arc S1E3 -The Beginning Of The War! Ace And Whitebeard's Past!",
+ "start": 1783861200000,
+ "end": 1783863000000,
+ "date": "20260712",
+ "startTime": "09:00PM",
+ "endTime": "09:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783863000000,
+ "npvrStartTime": 1783861200000,
+ "cid": "one piece: marineford arcs1e3the beginning of the war! ace and whitebeard's past!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351520",
+ "vimProgramId": "202606244351520",
+ "name": "One Piece: Marineford Arc S1E4 -The Force That Could Destroy The World! The Power Of The Tremor-Tremor Frui",
+ "start": 1783863000000,
+ "end": 1783864680000,
+ "date": "20260712",
+ "startTime": "09:30PM",
+ "endTime": "09:58PM",
+ "duration": 28,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783864680000,
+ "npvrStartTime": 1783863000000,
+ "cid": "one piece: marineford arcs1e4the force that could destroy the world! the power of the tremor-tremor frui",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351521",
+ "vimProgramId": "202606244351521",
+ "name": "One Piece: Marineford Arc S1E5 -An All-Encompassing Inferno!! Admiral Akainu's Power!",
+ "start": 1783864680000,
+ "end": 1783866480000,
+ "date": "20260712",
+ "startTime": "09:58PM",
+ "endTime": "10:28PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783866480000,
+ "npvrStartTime": 1783864680000,
+ "cid": "one piece: marineford arcs1e5an all-encompassing inferno!! admiral akainu's power!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351522",
+ "vimProgramId": "202606244351522",
+ "name": "One Piece: Marineford Arc S1E6 -A Descendant Of The Beast! Little Oars Jr. Full Speed Ahead!",
+ "start": 1783866480000,
+ "end": 1783868400000,
+ "date": "20260712",
+ "startTime": "10:28PM",
+ "endTime": "11:00PM",
+ "duration": 32,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783868400000,
+ "npvrStartTime": 1783866480000,
+ "cid": "one piece: marineford arcs1e6a descendant of the beast! little oars jr. full speed ahead!",
+ "sid": "one piece: marineford arcs1",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351523",
+ "vimProgramId": "202606244351523",
+ "name": "Fruits Basket S2E23 -It's Cinderella-Ish",
+ "start": 1783868400000,
+ "end": 1783870200000,
+ "date": "20260712",
+ "startTime": "11:00PM",
+ "endTime": "11:30PM",
+ "duration": 30,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783870200000,
+ "npvrStartTime": 1783868400000,
+ "cid": "fruits baskets2e23it's cinderella-ish",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351524",
+ "vimProgramId": "202606244351524",
+ "name": "Fruits Basket S2E24 -Here You Are",
+ "start": 1783870200000,
+ "end": 1783871880000,
+ "date": "20260712",
+ "startTime": "11:30PM",
+ "endTime": "11:58PM",
+ "duration": 28,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783871880000,
+ "npvrStartTime": 1783870200000,
+ "cid": "fruits baskets2e24here you are",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ },
+ {
+ "key": "key_202606244351525",
+ "vimProgramId": "202606244351525",
+ "name": "Fruits Basket S2E25 -I'm Different Now",
+ "start": 1783871880000,
+ "end": 1783873800000,
+ "date": "20260712",
+ "startTime": "11:58PM",
+ "endTime": "12:30AM",
+ "duration": 32,
+ "recordable": true,
+ "restartTv": false,
+ "restartOtt": false,
+ "npvrProg": true,
+ "npvrEndTime": 1783873800000,
+ "npvrStartTime": 1783871880000,
+ "cid": "fruits baskets2e25i'm different now",
+ "sid": "fruits baskets2",
+ "cc": "",
+ "isInWatchlist": false
+ }
+ ]
+]
\ No newline at end of file
diff --git a/sites/nowplayer.now.com/__data__/program01.json b/sites/nowplayer.now.com/__data__/program01.json
new file mode 100644
index 000000000..d9d7cb661
--- /dev/null
+++ b/sites/nowplayer.now.com/__data__/program01.json
@@ -0,0 +1,55 @@
+{
+ "actualStartTime": 1783785600000,
+ "programDateTimeForMobile": "Tomorrow 12 Jul\u003Cbr /\u003E12:00 AM-12:30 AM",
+ "autoProgName": "第2集 - The Beginning Of The Story",
+ "autoSeriesName": "克拉龍人拉格納",
+ "autoSynopsis": "翼之血族在各地發動全面進攻, 拉格納運用獲得的力量與新出現的上級龍梅古卜帝戰鬥, 而他在此時所遇見的少女又是何許人物?未來與現在的記憶混亂不清, 為了迴避自己曾經歷過的淒慘未來, 拉格納決定投入與龍族的戰鬥, 並下定決心與某人道別。",
+ "channelAutoName": "Animax",
+ "channelChiName": "Animax",
+ "channelEngName": "Animax",
+ "channelId": "150",
+ "channelKey": "201507200000414",
+ "chiProgName": "第2集 - The Beginning Of The Story",
+ "chiSeriesName": "克拉龍人拉格納",
+ "chiSynopsis": "翼之血族在各地發動全面進攻, 拉格納運用獲得的力量與新出現的上級龍梅古卜帝戰鬥, 而他在此時所遇見的少女又是何許人物?未來與現在的記憶混亂不清, 為了迴避自己曾經歷過的淒慘未來, 拉格納決定投入與龍族的戰鬥, 並下定決心與某人道別。",
+ "cid": "ragna crimsons1e2the beginning of the story",
+ "createdBy": "keith.sk.hung@pccw.com",
+ "createdDate": "2026-06-24 12:13:00.0",
+ "director": "Ken Takakura",
+ "duration": 30,
+ "effectiveDay": 7,
+ "endTime": 1783787400000,
+ "engProgName": "E2 - The Beginning Of The Story",
+ "engSeriesName": "Ragna Crimson",
+ "engSynopsis": "Ragna uses his newly gained power to hunt dragons and makes a resolution to avoid the miserable future that awaits him.",
+ "episodeName": "Ragna Crimson S1E2 -The Beginning Of The Story",
+ "episodeNum": 2,
+ "episodic": "Y",
+ "expirationDay": 10,
+ "firstReleaseYear": 2023,
+ "genre": "Anime",
+ "hasOtherNonAdult": false,
+ "hasOtherTime": false,
+ "isDeleted": "N",
+ "isKolWatchParty": "N",
+ "isLive": "N",
+ "isNpvrOnair": "N",
+ "isNpvrProg": "Y",
+ "isRestartTv": "N",
+ "isRestartOtt": "N",
+ "modifiedBy": "Npvr Postcut Assetloader",
+ "modifiedDate": "2026-07-05 00:00:27.0",
+ "originalLanguage": "Japanese",
+ "portraitImage": "",
+ "premier": 0,
+ "progName": "Ragna Crimson S1E2 -The Beginning Of The Story",
+ "programId": "202606244351477",
+ "recordable": "Y",
+ "seriesName": "Ragna Crimson",
+ "sid": "ragna crimsons1",
+ "synopsis": "Ragna uses his newly gained power to hunt dragons and makes a resolution to avoid the miserable future that awaits him.",
+ "watchPartyPlatform": [],
+ "withImageTitle": "N",
+ "isAdultContent": false,
+ "isInWatchlist": false
+}
\ No newline at end of file
diff --git a/sites/nowplayer.now.com/__data__/program02.json b/sites/nowplayer.now.com/__data__/program02.json
new file mode 100644
index 000000000..50c4041a7
--- /dev/null
+++ b/sites/nowplayer.now.com/__data__/program02.json
@@ -0,0 +1,55 @@
+{
+ "actualStartTime": 1783871880000,
+ "programDateTimeForMobile": "Tomorrow 12 Jul\u003Cbr /\u003E11:58 PM-12:30 AM",
+ "autoProgName": "第25集 - I'm Different Now",
+ "autoSeriesName": "魔法水果籃",
+ "autoSynopsis": "紅野看了小透準備的一個類似灰姑娘的故事, 並希望他能知道亞里紗對自己的感覺。",
+ "channelAutoName": "Animax",
+ "channelChiName": "Animax",
+ "channelEngName": "Animax",
+ "channelId": "150",
+ "channelKey": "201507200000414",
+ "chiProgName": "第25集 - I'm Different Now",
+ "chiSeriesName": "魔法水果籃",
+ "chiSynopsis": "紅野看了小透準備的一個類似灰姑娘的故事, 並希望他能知道亞里紗對自己的感覺。",
+ "cid": "fruits baskets2e25i'm different now",
+ "createdBy": "keith.sk.hung@pccw.com",
+ "createdDate": "2026-06-24 12:13:00.0",
+ "director": "Yoshihide Ibata",
+ "duration": 32,
+ "effectiveDay": 7,
+ "endTime": 1783873800000,
+ "engProgName": "E25 - I'm Different Now",
+ "engSeriesName": "Fruits Basket",
+ "engSynopsis": "Kureno watches a copy of the Cinderella-ish play which Tohru prepared, hoping that he will realize Arisa's feelings for him.",
+ "episodeName": "Fruits Basket S2E25 -I'm Different Now",
+ "episodeNum": 25,
+ "episodic": "Y",
+ "expirationDay": 10,
+ "firstReleaseYear": 2020,
+ "genre": "Anime",
+ "hasOtherNonAdult": true,
+ "hasOtherTime": true,
+ "isDeleted": "N",
+ "isKolWatchParty": "N",
+ "isLive": "N",
+ "isNpvrOnair": "N",
+ "isNpvrProg": "Y",
+ "isRestartTv": "N",
+ "isRestartOtt": "N",
+ "modifiedBy": "Npvr Postcut Assetloader",
+ "modifiedDate": "2026-07-06 00:00:24.0",
+ "originalLanguage": "Japanese",
+ "portraitImage": "",
+ "premier": 0,
+ "progName": "Fruits Basket S2E25 -I'm Different Now",
+ "programId": "202606244351525",
+ "recordable": "Y",
+ "seriesName": "Fruits Basket",
+ "sid": "fruits baskets2",
+ "synopsis": "Kureno watches a copy of the Cinderella-ish play which Tohru prepared, hoping that he will realize Arisa's feelings for him.",
+ "watchPartyPlatform": [],
+ "withImageTitle": "N",
+ "isAdultContent": false,
+ "isInWatchlist": false
+}
\ No newline at end of file
diff --git a/sites/nowplayer.now.com/nowplayer.now.com.config.js b/sites/nowplayer.now.com/nowplayer.now.com.config.js
index 14697d29c..1301f8dda 100644
--- a/sites/nowplayer.now.com/nowplayer.now.com.config.js
+++ b/sites/nowplayer.now.com/nowplayer.now.com.config.js
@@ -2,34 +2,81 @@ const axios = require('axios')
const cheerio = require('cheerio')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
+const doFetch = require('@ntlab/sfetch')
dayjs.extend(utc)
+const eventIds = {}
+const cookies = {}
+const caches = {}
+
module.exports = {
site: 'nowplayer.now.com',
days: 2,
- url: function ({ channel, date }) {
+ url({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd') + 1
return `https://nowplayer.now.com/tvguide/epglist?channelIdList[]=${channel.site_id}&day=${diff}`
},
request: {
+ cache: {
+ ttl: 24 * 60 * 60 * 1000 // 1 day
+ },
headers({ channel }) {
return {
- Cookie: `LANG=${channel.lang}; Expires=null; Path=/; Domain=nowplayer.now.com`
+ 'user-agent':
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36 OPR/132.0.0.0',
+ 'cookie': Object.entries({ ...cookies, LANG: channel.lang})
+ .map(a => `${a[0]}=${a[1]}`)
+ .join('; ')
}
}
},
- parser: function ({ content }) {
- let programs = []
+ async parser({ content, channel, headers }) {
+ const programs = []
+ parseCookies(headers)
const items = parseItems(content)
- items.forEach(item => {
- programs.push({
- title: item.name,
- start: parseStart(item),
- stop: parseStop(item)
+ if (items.length) {
+ if (eventIds[channel.lang] === undefined) {
+ eventIds[channel.lang] = []
+ }
+ const queues = items
+ .filter(item => item.vimProgramId && !eventIds[channel.lang].includes(item.vimProgramId))
+ .map(item => {
+ const url = `https://nowplayer.now.com/tvguide/epgprogramdetail?programId=${item.vimProgramId}`
+ if (caches[url] !== undefined) {
+ item.detail = caches[url]
+ } else {
+ return {
+ url,
+ params: { headers: module.exports.request.headers({ channel }) },
+ item
+ }
+ }
+ })
+ .filter(Boolean)
+ const worker = process.env.EPG_DETAILED_GUIDE_WORKER || 10
+ const delay = process.env.EPG_DETAILED_GUIDE_DELAY || 500
+ await doFetch(queues, { worker }, async (queue, res, headers) => {
+ parseCookies(headers)
+ queue.item.detail = res
+ caches[queue.url] = res
+ await new Promise(resolve => setTimeout(resolve, delay))
})
- })
+ items.forEach(item => {
+ eventIds[channel.lang].push(item.vimProgramId)
+ programs.push({
+ title: (channel.lang === 'zh' ? item.detail?.chiProgName : item.detail?.progName) || item.name,
+ description: channel.lang === 'zh' ? item.detail?.chiSynopsis : item.detail?.synopsis,
+ categories: [item.detail?.genre, item.detail?.subGenre].filter(Boolean),
+ actor: item.detail?.actor?.split(',').map(a => a.trim()),
+ director: item.detail?.director?.split(',').map(a => a.trim()),
+ year: item.detail?.firstReleaseYear?.toString(),
+ start: getDate(item.start),
+ stop: getDate(item.end)
+ })
+ })
+ }
return programs
},
@@ -39,7 +86,7 @@ module.exports = {
.then(r => r.data)
.catch(console.log)
- let channels = []
+ const channels = []
const $ = cheerio.load(html)
$('body > div.container > .tv-guide-s-g > div > div').each((i, el) => {
@@ -54,17 +101,27 @@ module.exports = {
}
}
-function parseStart(item) {
- return dayjs(item.start)
-}
-
-function parseStop(item) {
- return dayjs(item.end)
-}
-
function parseItems(content) {
const data = JSON.parse(content)
if (!data || !Array.isArray(data)) return []
return Array.isArray(data[0]) ? data[0] : []
}
+
+function parseCookies(headers) {
+ if (headers && Array.isArray(headers['set-cookie'])) {
+ headers['set-cookie']
+ .map(cookie => cookie.split(';')[0].trim())
+ .forEach(cookie => {
+ const [k, v] = [
+ cookie.substr(0, cookie.indexOf('=')),
+ cookie.substr(cookie.indexOf('=') + 1),
+ ]
+ cookies[k] = v
+ })
+ }
+}
+
+function getDate(dt) {
+ return dayjs.utc(dt)
+}
diff --git a/sites/nowplayer.now.com/nowplayer.now.com.test.js b/sites/nowplayer.now.com/nowplayer.now.com.test.js
index 39e90077a..e90346a51 100644
--- a/sites/nowplayer.now.com/nowplayer.now.com.test.js
+++ b/sites/nowplayer.now.com/nowplayer.now.com.test.js
@@ -1,57 +1,119 @@
const { parser, url, request } = require('./nowplayer.now.com.config.js')
+const axios = require('axios')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
+
+process.env.EPG_DETAILED_GUIDE_DELAY = 0
+
dayjs.extend(customParseFormat)
dayjs.extend(utc)
+jest.mock('axios')
+
+const date = dayjs.utc().startOf('d')
const channel = {
- lang: 'zh',
- site_id: '096',
- xmltv_id: 'ViuTVsix.hk'
+ lang: 'en',
+ site_id: '150',
+ xmltv_id: 'AnimaxAsia.sg@SD'
}
+axios.get.mockImplementation(url => {
+ const urls = {
+ 'https://nowplayer.now.com/tvguide/epglist?channelIdList[]=150&day=1': 'content.json',
+ 'https://nowplayer.now.com/tvguide/epgprogramdetail?programId=202606244351477': 'program01.json',
+ 'https://nowplayer.now.com/tvguide/epgprogramdetail?programId=202606244351525': 'program02.json'
+ }
+ let data = ''
+ if (urls[url] !== undefined) {
+ data = JSON.parse(fs.readFileSync(path.join(__dirname, '__data__', urls[url])))
+ }
+ return Promise.resolve({ data })
+})
+
+
it('can generate valid url for today', () => {
- const date = dayjs.utc().startOf('d')
expect(url({ channel, date })).toBe(
- 'https://nowplayer.now.com/tvguide/epglist?channelIdList[]=096&day=1'
+ 'https://nowplayer.now.com/tvguide/epglist?channelIdList[]=150&day=1'
)
})
it('can generate valid url for tomorrow', () => {
- const date = dayjs.utc().startOf('d').add(1, 'd')
- expect(url({ channel, date })).toBe(
- 'https://nowplayer.now.com/tvguide/epglist?channelIdList[]=096&day=2'
+ expect(url({ channel, date: date.add(1, 'd') })).toBe(
+ 'https://nowplayer.now.com/tvguide/epglist?channelIdList[]=150&day=2'
)
})
it('can generate valid request headers', () => {
expect(request.headers({ channel })).toMatchObject({
- Cookie: 'LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com'
+ cookie: 'LANG=en'
})
})
-it('can parse response', () => {
+it('can parse en response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
- const result = parser({ content }).map(p => {
- p.start = p.start.toJSON()
- p.stop = p.stop.toJSON()
- return p
- })
+ const result = (await parser({ content, channel, date }))
+ .map(p => {
+ p.start = p.start.toJSON()
+ p.stop = p.stop.toJSON()
+ return p
+ })
- expect(result).toMatchObject([
- {
- start: '2021-11-23T18:00:00.000Z',
- stop: '2021-11-24T01:00:00.000Z',
- title: 'ViuTVsix Station Closing'
- }
- ])
+ expect(result.length).toBe(49)
+ expect(result[0]).toMatchObject({
+ start: '2026-07-11T16:00:00.000Z',
+ stop: '2026-07-11T16:30:00.000Z',
+ title: 'Ragna Crimson S1E2 -The Beginning Of The Story',
+ description:
+ 'Ragna uses his newly gained power to hunt dragons and makes a resolution to avoid the miserable future that awaits him.',
+ categories: ['Anime'],
+ year: '2023'
+ })
+ expect(result[48]).toMatchObject({
+ start: '2026-07-12T15:58:00.000Z',
+ stop: '2026-07-12T16:30:00.000Z',
+ title: 'Fruits Basket S2E25 -I\'m Different Now',
+ description:
+ 'Kureno watches a copy of the Cinderella-ish play which Tohru prepared, hoping that he will realize Arisa\'s feelings for him.',
+ categories: ['Anime'],
+ year: '2020'
+ })
})
-it('can handle empty guide', () => {
- const result = parser({
+it('can parse zh response', async () => {
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
+ const result = (await parser({ content, channel: { ...channel, lang: 'zh' }, date }))
+ .map(p => {
+ p.start = p.start.toJSON()
+ p.stop = p.stop.toJSON()
+ return p
+ })
+
+ expect(result.length).toBe(49)
+ expect(result[0]).toMatchObject({
+ start: '2026-07-11T16:00:00.000Z',
+ stop: '2026-07-11T16:30:00.000Z',
+ title: '第2集 - The Beginning Of The Story',
+ description:
+ '翼之血族在各地發動全面進攻, 拉格納運用獲得的力量與新出現的上級龍梅古卜帝戰鬥, 而他在此時所遇見的少女又是何許人物?未來與現在的記憶混亂不清, 為了迴避自己曾經歷過的淒慘未來, 拉格納決定投入與龍族的戰鬥, 並下定決心與某人道別。',
+ categories: ['Anime'],
+ year: '2023'
+ })
+ expect(result[48]).toMatchObject({
+ start: '2026-07-12T15:58:00.000Z',
+ stop: '2026-07-12T16:30:00.000Z',
+ title: '第25集 - I\'m Different Now',
+ description:
+ '紅野看了小透準備的一個類似灰姑娘的故事, 並希望他能知道亞里紗對自己的感覺。',
+ categories: ['Anime'],
+ year: '2020'
+ })
+})
+
+it('can handle empty guide', async () => {
+ const result = await parser({
content: '[[]]'
})
expect(result).toMatchObject([])
diff --git a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml
index c4538e3ab..4901204fd 100644
--- a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml
+++ b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml
@@ -1,16 +1,13 @@
- MOOV Concert/MV
- Watch N Learn
- Netflix
- Sports Schedule Highlights
Now Sports 4K 3
+ Now Sports 615
Now Sports Premier League 7
Now Sports 641
Now Sports 647
Now Sports 651
Now Sports 652
- Adult Promotional Channel
+ Lucky 688
ABC Australia
Al Jazeera English
Animal Planet
@@ -34,7 +31,6 @@
CCTV-4
CCTV-13
CGTN
- Channel Adult
CINEMAX
Channel NewsAsia
CNBC
@@ -42,7 +38,6 @@
COLORS
Crime + Investigation
CTI Asia Channel
- Da Vinci
Discovery Asia
Discovery Channel
Discovery Science
@@ -63,7 +58,6 @@
HISTORY
HITS
HITS MOVIES
- Ice Fire
Panda TV
KBS World
Lifetime
@@ -102,7 +96,6 @@
Now Sports 7
Now Sports 618
Now Sports 619
- Now Sports 650
Now Sports Plus
Now Sports Premier League 1
Now Sports Premier League 2
@@ -112,7 +105,6 @@
Now Sports Premier League 6
Now Sports Premier League TV
Now Sports Prime
- Now Video Express
Outdoor Channel
Phoenix Chinese Channel
Phoenix InfoNews Channel
@@ -135,8 +127,6 @@
tvN
GBA Satellite TV
Viu channel
- ViuTV
- ViuTVsix
Zee Cinema International
Zee News
Zee TV
diff --git a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml
index 065b20d65..63a13e1d9 100644
--- a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml
+++ b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml
@@ -1,16 +1,13 @@
- MOOV Concert/MV
- Watch N Learn
- Netflix
- Sports Schedule Highlights
Now Sports 4K 3
+ Now Sports 615
Now Sports Premier League 7
Now Sports 641
Now Sports 647
Now Sports 651
Now Sports 652
- Adult Promotional Channel
+ Lucky 688
ABC Australia
Al Jazeera English
Animal Planet
@@ -34,7 +31,6 @@
CCTV-4
CCTV-13
CGTN
- Channel Adult
CINEMAX
Channel NewsAsia
CNBC
@@ -42,7 +38,6 @@
COLORS
Crime + Investigation
CTI Asia Channel
- Da Vinci
Discovery Asia
Discovery Channel
Discovery Science
@@ -63,7 +58,6 @@
HISTORY
HITS
HITS MOVIES
- Ice Fire
Panda TV
KBS World
Lifetime
@@ -102,7 +96,6 @@
Now Sports 7
Now Sports 618
Now Sports 619
- Now Sports 650
Now Sports Plus
Now Sports Premier League 1
Now Sports Premier League 2
@@ -112,7 +105,6 @@
Now Sports Premier League 6
Now Sports Premier League TV
Now Sports Prime
- Now Video Express
Outdoor Channel
Phoenix Chinese Channel
Phoenix InfoNews Channel
@@ -135,8 +127,6 @@
tvN
GBA Satellite TV
Viu channel
- ViuTV
- ViuTVsix
Zee Cinema International
Zee News
Zee TV
diff --git a/sites/osn.com/osn.com_ar.channels.xml b/sites/osn.com/osn.com_ar.channels.xml
index 80a88dcb1..e87512982 100644
--- a/sites/osn.com/osn.com_ar.channels.xml
+++ b/sites/osn.com/osn.com_ar.channels.xml
@@ -5,21 +5,20 @@
OSNtv Showcase Classics
OSNtv iQIYI
OSNtv Movies Horror
+ OSNtv Pop Up 2
OSNtv Crime
OSNtv Documentary
- MBC Mood
KTV Channel 1 HD
OSNtv Now
OSNtv Movies Family
OSNtv Movies Comedy
- OSNtv Pop Up 90 Day Fiance
+ OSNtv Pop Up
eClutch Access
Esport 24
eClutch LIVE
Padel TV
eClutch LIVE 2
eClutch Arabic
- RT Arabic
STV1 HD
AD Sports 1 HD
Abu Dhabi TV HD
@@ -55,6 +54,7 @@
MBC Iraq
MBC Masr2
MBC Masr
+ MBC Mood
MBC+ Drama
MCM TOP
Moonbug Kids
@@ -76,6 +76,7 @@
RFM TV
Roya TV HD
RT English
+ RT Arabic
Al Thaqafeya
Sky News Arabia HD
TLC HD
diff --git a/sites/osn.com/osn.com_en.channels.xml b/sites/osn.com/osn.com_en.channels.xml
index 28b16e495..d06c247d8 100644
--- a/sites/osn.com/osn.com_en.channels.xml
+++ b/sites/osn.com/osn.com_en.channels.xml
@@ -5,21 +5,20 @@
OSNtv Showcase Classics
OSNtv iQIYI
OSNtv Movies Horror
+ OSNtv Pop Up 2
OSNtv Crime
OSNtv Documentary
- MBC Mood
KTV Channel 1 HD
OSNtv Now
OSNtv Movies Family
OSNtv Movies Comedy
- OSNtv Pop Up 90 Day Fiance
+ OSNtv Pop Up
eClutch Access
Esport 24
eClutch LIVE
Padel TV
eClutch LIVE 2
eClutch Arabic
- RT Arabic
STV1 HD
AD Sports 1 HD
Abu Dhabi TV HD
@@ -55,6 +54,7 @@
MBC Iraq
MBC Masr2
MBC Masr
+ MBC Mood
MBC+ Drama
MCM TOP
Moonbug Kids
@@ -76,6 +76,7 @@
RFM TV
Roya TV HD
RT English
+ RT Arabic
Al Thaqafeya
Sky News Arabia HD
TLC HD
diff --git a/sites/toonamiaftermath.com/__data__/certificate.pem b/sites/toonamiaftermath.com/__data__/certificate.pem
index 09d1850d9..36d01f457 100644
--- a/sites/toonamiaftermath.com/__data__/certificate.pem
+++ b/sites/toonamiaftermath.com/__data__/certificate.pem
@@ -1,89 +1,86 @@
-----BEGIN CERTIFICATE-----
-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
+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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
-MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
-Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
-Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
-bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
-fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
-L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
-yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
-dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
-XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
-MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
-AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
-tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
-Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
-VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
-AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
-k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
-VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
-9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
-6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
-NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
-0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
-f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
-Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
-p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
-wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
+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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-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
+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
-----END CERTIFICATE-----
diff --git a/sites/toonamiaftermath.com/__data__/content.json b/sites/toonamiaftermath.com/__data__/content.json
deleted file mode 100644
index 6591bdacc..000000000
--- a/sites/toonamiaftermath.com/__data__/content.json
+++ /dev/null
@@ -1 +0,0 @@
-{"_id":"635fbd8117f6824d953a216e","scheduleName":"Toonami Aftermath EST","startDate":"2022-11-29T17:00:00.000Z","playlist":{"startTime":"12pm","blocks":[{"tagline":"Weekdays 12.0-2.0pm","runtimeHoursTarget":1.9,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\x-men\\x-men 25.mkv","name":"X-Men","episodeNumber":25,"runtime":1223.8,"playlistIndex":1,"startDate":"2022-11-29T17:00:30.231Z","endDate":"2022-11-29T17:20:54.031Z","info":{"image":"https://i.imgur.com/ZSZ0x1m.gif","year":1992,"episode":"Reunion (Part 1)"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\mega man\\mega man 25.mkv","name":"Mega Man","episodeNumber":25,"runtime":1454.528,"playlistIndex":4,"startDate":"2022-11-29T17:21:48.837Z","endDate":"2022-11-29T17:46:03.365Z","info":{"image":"https://i.imgur.com/vhvmTlP.gif","year":1994,"episode":"Bad Day at Peril Park"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\men in black\\men in black 10.avi","name":"Men in Black","episodeNumber":10,"runtime":1260.52,"playlistIndex":8,"startDate":"2022-11-29T17:46:51.145Z","endDate":"2022-11-29T18:07:51.665Z","info":{"fullname":"Men in Black: The Series","image":"https://i.imgur.com/M2q5NRC.gif","episode":"The Head Trip Syndrome"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\street fighter ii v\\street fighter ii v 19.mkv","name":"Street Fighter II V","episodeNumber":19,"runtime":1423.808,"playlistIndex":11,"startDate":"2022-11-29T18:08:52.572Z","endDate":"2022-11-29T18:32:36.380Z","info":{"fullname":"Street Fighter II: V","image":"https://i.imgur.com/mQiuwRJ.gif","episode":"Special Orders to Iron Men"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\spider-man\\spider-man 35.mp4","name":"Spider-Man","episodeNumber":35,"runtime":1220.56,"playlistIndex":15,"startDate":"2022-11-29T18:33:39.440Z","endDate":"2022-11-29T18:54:00.000Z","info":{"image":"https://i.imgur.com/hprZiwl.gif","year":1994,"episode":"The Ultimate Slayer"}}],"type":"block","name":"Marvel vs Capcom","runtime":6840,"runtimeTarget":6840,"startDate":"2022-11-29T17:00:00.000Z","endDate":"2022-11-29T18:54:00.000Z"},{"tagline":"Weekdays 2.0-4.0pm","runtimeHoursTarget":2.1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\silverhawks\\silverhawks 50.mp4","name":"Silverhawks","episodeNumber":50,"runtime":1339.963,"playlistIndex":18,"startDate":"2022-11-29T18:55:30.492Z","endDate":"2022-11-29T19:17:50.455Z","info":{"image":"https://i.imgur.com/dpR9jOG.gif","episode":"Gangwar, Part 1"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\saint seiya\\saint seiya 23.mkv","name":"Saint Seiya","episodeNumber":23,"runtime":1464.755,"playlistIndex":22,"startDate":"2022-11-29T19:18:20.236Z","endDate":"2022-11-29T19:42:44.991Z","info":{"image":"https://i.imgur.com/6rmD2nL.gif","episode":"Silver Saint! Vain and Boastful Assassin"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\zeta gundam\\zeta gundam 11.mkv","name":"Zeta Gundam","episodeNumber":11,"runtime":1457.19,"playlistIndex":26,"startDate":"2022-11-29T19:43:14.903Z","endDate":"2022-11-29T20:07:32.093Z","info":{"fullname":"Mobile Suit Zeta Gundam","image":"https://i.imgur.com/Tqe7v2I.gif","episode":"Entering the Atmosphere"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\robotech\\robotech 2.mp4","name":"Robotech","episodeNumber":2,"runtime":1450.716,"playlistIndex":31,"startDate":"2022-11-29T20:08:35.654Z","endDate":"2022-11-29T20:32:46.370Z","info":{"image":"https://i.imgur.com/d2iQJ5T.gif","year":1985,"episode":"Countdown"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\reboot\\reboot 6.avi","name":"Reboot","episodeNumber":6,"runtime":1421.256,"playlistIndex":36,"startDate":"2022-11-29T20:33:48.276Z","endDate":"2022-11-29T20:57:29.532Z","info":{"image":"https://i.imgur.com/CFaaZSh.gif","year":1994,"episode":"In the Belly of the Beast"}}],"type":"block","name":"Toonami O.G.","runtime":7559.999999999998,"runtimeTarget":7560,"startDate":"2022-11-29T18:54:00.000Z","endDate":"2022-11-29T21:00:00.000Z"},{"tagline":"Weekdays 4.0-5.0pm","runtimeHoursTarget":1,"defaultCommercialBreak":{"type":"commercialBreak","mediaType":"commercial","filter":{"yearRange":{"start":1997,"end":2002}}},"breakInject":{"enable":true,"breaks":1},"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\pokemon\\pokemon 265.mkv","name":"Pokemon","episodeNumber":248,"runtime":1292.298,"seekEndTime":718.6134999999999,"playlistIndex":42,"startDate":"2022-11-29T21:00:00.000Z","endDate":"2022-11-29T21:25:29.432Z","info":{"image":"https://i.imgur.com/VfdN6pP.gif","year":1997,"episode":"One Trick Phony!"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\batman\\batman 73.mp4","name":"Batman","episodeNumber":73,"runtime":1275.883,"seekEndTime":524.6800000000001,"playlistIndex":63,"startDate":"2022-11-29T21:30:11.376Z","endDate":"2022-11-29T21:55:35.486Z","info":{"fullname":"Batman: The Animated Series","image":"https://i.imgur.com/nygJi6C.gif","episode":"Time Out of Joint"}}],"type":"block","name":"Classic Toon","runtime":3600.0000000000014,"runtimeTarget":3600,"startDate":"2022-11-29T21:00:00.000Z","endDate":"2022-11-29T22:00:00.000Z"},{"tagline":"Weekdays 5.0-7.0pm","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dragonball\\dragonball 145.mkv","name":"Dragonball","episodeNumber":145,"runtime":1244.243,"playlistIndex":86,"startDate":"2022-11-29T22:01:30.791Z","endDate":"2022-11-29T22:22:15.034Z","info":{"fullname":"Dragon Ball","image":"https://i.imgur.com/cQBxAVU.gif","episode":"Junior No More"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\sailor moon\\sailor moon 9.mp4","name":"Sailor Moon","episodeNumber":9,"runtime":1303.189333,"playlistIndex":93,"startDate":"2022-11-29T22:25:48.575Z","endDate":"2022-11-29T22:47:31.764Z","info":{"image":"https://i.imgur.com/TnI0NkT.gif","year":1995,"episode":"Cruise Blues"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 215.mkv","name":"DBZ","episodeNumber":215,"runtime":1244.696,"playlistIndex":97,"startDate":"2022-11-29T22:48:47.299Z","endDate":"2022-11-29T23:09:31.995Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Vegeta's Pride"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 216.mkv","name":"DBZ","episodeNumber":216,"runtime":1244.69225,"playlistIndex":105,"startDate":"2022-11-29T23:12:12.986Z","endDate":"2022-11-29T23:32:57.678Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"The Long Awaited Fight"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\g gundam\\g gundam 40.mkv","name":"G Gundam","episodeNumber":40,"runtime":1440.732,"playlistIndex":114,"startDate":"2022-11-29T23:35:59.267Z","endDate":"2022-11-30T00:00:00.000Z","info":{"fullname":"Mobile Fighter G Gundam","image":"https://i.imgur.com/WCckIMt.gif","episode":"The Ruthless Fight! Schwarz's Last Match"}}],"type":"block","name":"Toonami","runtime":7199.999999999996,"runtimeTarget":7200,"startDate":"2022-11-29T22:00:00.000Z","endDate":"2022-11-30T00:00:00.000Z"},{"tagline":"Tue/Wed 7.0-8.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\samurai jack\\samurai jack 11.avi","name":"Samurai Jack","episodeNumber":11,"runtime":1350.36,"playlistIndex":116,"startDate":"2022-11-30T00:00:29.931Z","endDate":"2022-11-30T00:23:00.291Z","info":{"image":"https://i.imgur.com/twLpmyP.gif","episode":"Jack and the Scotsman"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\samurai jack\\samurai jack 12.avi","name":"Samurai Jack","episodeNumber":12,"runtime":1355.4,"playlistIndex":132,"startDate":"2022-11-30T00:30:25.321Z","endDate":"2022-11-30T00:53:00.721Z","info":{"image":"https://i.imgur.com/twLpmyP.gif","episode":"Jack and the Gangsters"}}],"type":"block","name":"Special: Samurai Jack","runtime":3599.9999999999995,"runtimeTarget":3600,"startDate":"2022-11-30T00:00:00.000Z","endDate":"2022-11-30T01:00:00.000Z"},{"tagline":"Weekdays 8.0-9.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\courage the cowardly dog\\courage the cowardly dog 32.mp4","name":"Courage the Cowardly Dog","episodeNumber":32,"runtime":1355.465,"playlistIndex":148,"startDate":"2022-11-30T01:01:02.973Z","endDate":"2022-11-30T01:23:38.438Z","info":{"image":"https://i.imgur.com/KD0PG3P.gif","episode":"Katz Under the Sea / Curtain of Cruelty"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\ed edd eddy\\ed edd eddy 47.mp4","name":"Ed Edd Eddy","episodeNumber":47,"runtime":657.024,"playlistIndex":149,"startDate":"2022-11-30T01:23:38.438Z","endDate":"2022-11-30T01:34:35.462Z","info":{"fullname":"Ed Edd n' Eddy","image":"https://i.imgur.com/igzgfih.gif","episode":"Ed in a Half Shell"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\johnny bravo\\johnny bravo 169.avi","name":"Johnny Bravo","episodeNumber":169,"runtime":650.893343,"playlistIndex":150,"startDate":"2022-11-30T01:34:35.462Z","endDate":"2022-11-30T01:45:26.355Z","info":{"image":"https://i.imgur.com/duW3ILx.gif"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\what a cartoon! show\\what a cartoon! show 14.avi","name":"What A Cartoon! Show","episodeNumber":14,"runtime":451.585,"playlistIndex":151,"startDate":"2022-11-30T01:45:26.355Z","endDate":"2022-11-30T01:52:57.940Z","info":{"image":"https://i.imgur.com/Vfe6dDZ.gif","episode":"The Powerpuff Girls: Crime 101"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\cow and chicken\\cow and chicken 57.avi","name":"Cow and Chicken","episodeNumber":57,"runtime":393.96,"playlistIndex":152,"startDate":"2022-11-30T01:52:57.940Z","endDate":"2022-11-30T01:59:31.900Z","info":{"image":"https://i.imgur.com/0QYl7ZQ.gif","episode":"Cow Fly"}}],"type":"block","name":"Cartoon Cartoon","runtime":3600,"runtimeTarget":3600,"startDate":"2022-11-30T01:00:00.000Z","endDate":"2022-11-30T02:00:00.000Z"},{"tagline":"Weekdays 9.0-11.0pm","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dragonball\\dragonball 146.mkv","name":"Dragonball","episodeNumber":146,"runtime":1244.243,"playlistIndex":157,"startDate":"2022-11-30T02:01:30.791Z","endDate":"2022-11-30T02:22:15.034Z","info":{"fullname":"Dragon Ball","image":"https://i.imgur.com/cQBxAVU.gif","episode":"Goku's Trap"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\sailor moon\\sailor moon 10.mp4","name":"Sailor Moon","episodeNumber":10,"runtime":1301.676,"playlistIndex":165,"startDate":"2022-11-30T02:25:54.752Z","endDate":"2022-11-30T02:47:36.428Z","info":{"image":"https://i.imgur.com/TnI0NkT.gif","year":1995,"episode":"Fight to the Finish"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 217.mkv","name":"DBZ","episodeNumber":217,"runtime":1244.693125,"playlistIndex":169,"startDate":"2022-11-30T02:48:51.597Z","endDate":"2022-11-30T03:09:36.290Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Magic Ball of Buu"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 218.mkv","name":"DBZ","episodeNumber":218,"runtime":1250.648,"playlistIndex":177,"startDate":"2022-11-30T03:12:17.924Z","endDate":"2022-11-30T03:33:08.572Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Buu Is Hatched!"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\gundam wing\\gundam wing 23.mp4","name":"Gundam Wing","episodeNumber":23,"runtime":1416.790367,"playlistIndex":187,"startDate":"2022-11-30T03:36:23.209Z","endDate":"2022-11-30T04:00:00.000Z","info":{"image":"https://i.imgur.com/XWp96IJ.gif","episode":"Duo, the God of Death Once Again"}}],"type":"block","name":"Toonami","runtime":7199.999999999998,"runtimeTarget":7200,"startDate":"2022-11-30T02:00:00.000Z","endDate":"2022-11-30T04:00:00.000Z"},{"tagline":"Weekdays 8.0-9.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\space ghost c2c\\space ghost c2c 21.avi","name":"Space Ghost C2C","episodeNumber":20,"runtime":1372.437733,"playlistIndex":200,"startDate":"2022-11-30T04:05:05.936Z","endDate":"2022-11-30T04:27:58.373Z","info":{"fullname":"Space Ghost Coast to Coast","image":"https://i.imgur.com/7oi7Qxf.gif","year":1993}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\home movies\\home movies 5.avi","name":"Home Movies","episodeNumber":5,"runtime":1307.2,"playlistIndex":212,"startDate":"2022-11-30T04:33:04.056Z","endDate":"2022-11-30T04:54:51.256Z","info":{"image":"https://i.imgur.com/VDMuEdj.gif","episode":"Yoko (aka We'll Always Have Tuesday)"}}],"type":"block","name":"Ghost Planet","runtime":3600,"runtimeTarget":3600,"startDate":"2022-11-30T04:00:00.000Z","endDate":"2022-11-30T05:00:00.000Z"},{"tagline":"Weekdays 12.0-2.0am","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\trigun\\trigun 11.mp4","name":"Trigun","episodeNumber":11,"runtime":1386.803,"playlistIndex":227,"startDate":"2022-11-30T05:01:30.125Z","endDate":"2022-11-30T05:24:36.928Z","info":{"image":"https://i.imgur.com/5Gde0JD.gif","episode":"Escape from Pain"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\yu yu hakusho\\yu yu hakusho 86.mp4","name":"Yu Yu Hakusho","episodeNumber":86,"runtime":1422.422,"playlistIndex":233,"startDate":"2022-11-30T05:26:21.226Z","endDate":"2022-11-30T05:50:03.648Z","info":{"fullname":"Yu Yu Hakusho: Ghost Files","image":"https://i.imgur.com/zLgdAie.gif","episode":"The Difference Maker"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\rurouni kenshin\\rurouni kenshin 18.mp4","name":"Rurouni Kenshin","episodeNumber":18,"runtime":1200.034,"playlistIndex":235,"startDate":"2022-11-30T05:51:03.146Z","endDate":"2022-11-30T06:11:03.180Z","info":{"fullname":"Rurouni Kenshin","image":"https://i.imgur.com/litCtMD.gif","year":1996,"episode":"Run Yahiko! Get the Reverse-Edged Sword Back"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\lupin iii\\lupin iii 26.mkv","name":"Lupin III","episodeNumber":26,"runtime":1320.32,"playlistIndex":240,"startDate":"2022-11-30T06:12:49.770Z","endDate":"2022-11-30T06:34:50.090Z","info":{"fullname":"Lupin the 3rd","image":"https://i.imgur.com/ttnXgu9.gif","year":1977,"episode":"Shot Through the Heart"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\ranma\\ranma 56.mp4","name":"Ranma","episodeNumber":56,"runtime":1392.405,"playlistIndex":245,"startDate":"2022-11-30T06:36:47.595Z","endDate":"2022-11-30T07:00:00.000Z","info":{"fullname":"Ranma 1/2","image":"https://i.imgur.com/GZNzBTy.gif","year":1989,"episode":"Kodachi the Black Rose! The Beeline to True Love"}}],"type":"block","name":"Midnight Run","runtime":7199.999999999999,"runtimeTarget":7200,"startDate":"2022-11-30T05:00:00.000Z","endDate":"2022-11-30T07:00:00.000Z"},{"tagline":"Weekdays 2.0-4.0am","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\wolfs rain\\wolfs rain 24.mkv","name":"Wolfs Rain","episodeNumber":24,"runtime":1311.643,"playlistIndex":246,"startDate":"2022-11-30T07:00:00.000Z","endDate":"2022-11-30T07:21:51.643Z","info":{"fullname":"Wolf's Rain","image":"https://i.imgur.com/RtRk8oq.gif","episode":"Scent of a Trap"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\12 oz mouse\\12 oz mouse 12.avi","name":"12 oz Mouse","episodeNumber":12,"runtime":690.517648,"playlistIndex":255,"startDate":"2022-11-30T07:25:34.296Z","endDate":"2022-11-30T07:37:04.813Z","info":{"image":"https://i.imgur.com/VxDpdPC.gif","episode":"Enjoy the Arm"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\elfen lied\\elfen lied 4.mp4","name":"Elfen Lied","episodeNumber":4,"runtime":1512.511,"playlistIndex":265,"startDate":"2022-11-30T07:41:00.148Z","endDate":"2022-11-30T08:06:12.659Z","info":{"image":"https://i.imgur.com/FA7swkr.gif","episode":"Attack"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\shin chan\\shin chan 10.mp4","name":"Shin Chan","episodeNumber":10,"runtime":1390.022,"playlistIndex":275,"startDate":"2022-11-30T08:10:13.270Z","endDate":"2022-11-30T08:33:23.292Z","info":{"image":"https://i.imgur.com/XWL4wlj.gif","episode":"Can't Abort Them When They're Not Yours"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\slayers\\slayers 4.mkv","name":"Slayers","episodeNumber":4,"runtime":1344.491,"playlistIndex":289,"startDate":"2022-11-30T08:37:35.508Z","endDate":"2022-11-30T09:00:00.000Z","info":{"fullname":"The Slayers","image":"https://i.imgur.com/izHAHny.gif","year":1995,"episode":"DASH! Run for it! My Magic Doesn't Work?"}}],"type":"block","name":"All Kids Outta The Pool","runtime":7200,"runtimeTarget":7200,"startDate":"2022-11-30T07:00:00.000Z","endDate":"2022-11-30T09:00:00.000Z"},{"tagline":"Weekdays 4.0-5.0pm","runtimeHoursTarget":1,"defaultCommercialBreak":{"type":"commercialBreak","mediaType":"commercial","filter":{"yearRange":{"start":1997,"end":2002}}},"breakInject":{"enable":true,"breaks":1},"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\pokemon\\pokemon 265.mkv","name":"Pokemon","episodeNumber":248,"runtime":1292.298,"seekEndTime":718.6134999999999,"playlistIndex":290,"startDate":"2022-11-30T09:00:00.000Z","endDate":"2022-11-30T09:25:29.432Z","info":{"image":"https://i.imgur.com/VfdN6pP.gif","year":1997,"episode":"One Trick Phony!"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\batman\\batman 73.mp4","name":"Batman","episodeNumber":73,"runtime":1275.883,"seekEndTime":524.6800000000001,"playlistIndex":311,"startDate":"2022-11-30T09:30:11.376Z","endDate":"2022-11-30T09:55:35.486Z","info":{"fullname":"Batman: The Animated Series","image":"https://i.imgur.com/nygJi6C.gif","episode":"Time Out of Joint"}}],"type":"block","name":"Classic Toon","runtime":3600.0000000000014,"runtimeTarget":3600,"rerun":true,"startDate":"2022-11-30T09:00:00.000Z","endDate":"2022-11-30T10:00:00.000Z"},{"tagline":"Weekdays 5.0-7.0pm","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dragonball\\dragonball 145.mkv","name":"Dragonball","episodeNumber":145,"runtime":1244.243,"playlistIndex":334,"startDate":"2022-11-30T10:01:30.791Z","endDate":"2022-11-30T10:22:15.034Z","info":{"fullname":"Dragon Ball","image":"https://i.imgur.com/cQBxAVU.gif","episode":"Junior No More"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\sailor moon\\sailor moon 9.mp4","name":"Sailor Moon","episodeNumber":9,"runtime":1303.189333,"playlistIndex":341,"startDate":"2022-11-30T10:25:48.575Z","endDate":"2022-11-30T10:47:31.764Z","info":{"image":"https://i.imgur.com/TnI0NkT.gif","year":1995,"episode":"Cruise Blues"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 215.mkv","name":"DBZ","episodeNumber":215,"runtime":1244.696,"playlistIndex":345,"startDate":"2022-11-30T10:48:47.299Z","endDate":"2022-11-30T11:09:31.995Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Vegeta's Pride"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 216.mkv","name":"DBZ","episodeNumber":216,"runtime":1244.69225,"playlistIndex":353,"startDate":"2022-11-30T11:12:12.986Z","endDate":"2022-11-30T11:32:57.678Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"The Long Awaited Fight"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\g gundam\\g gundam 40.mkv","name":"G Gundam","episodeNumber":40,"runtime":1440.732,"playlistIndex":362,"startDate":"2022-11-30T11:35:59.267Z","endDate":"2022-11-30T12:00:00.000Z","info":{"fullname":"Mobile Fighter G Gundam","image":"https://i.imgur.com/WCckIMt.gif","episode":"The Ruthless Fight! Schwarz's Last Match"}}],"type":"block","name":"Toonami","runtime":7199.999999999996,"runtimeTarget":7200,"rerun":true,"startDate":"2022-11-30T10:00:00.000Z","endDate":"2022-11-30T12:00:00.000Z"},{"tagline":"Tue/Wed 7.0-8.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\samurai jack\\samurai jack 11.avi","name":"Samurai Jack","episodeNumber":11,"runtime":1350.36,"playlistIndex":364,"startDate":"2022-11-30T12:00:29.931Z","endDate":"2022-11-30T12:23:00.291Z","info":{"image":"https://i.imgur.com/twLpmyP.gif","episode":"Jack and the Scotsman"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\samurai jack\\samurai jack 12.avi","name":"Samurai Jack","episodeNumber":12,"runtime":1355.4,"playlistIndex":380,"startDate":"2022-11-30T12:30:25.321Z","endDate":"2022-11-30T12:53:00.721Z","info":{"image":"https://i.imgur.com/twLpmyP.gif","episode":"Jack and the Gangsters"}}],"type":"block","name":"Special: Samurai Jack","runtime":3599.9999999999995,"runtimeTarget":3600,"rerun":true,"startDate":"2022-11-30T12:00:00.000Z","endDate":"2022-11-30T13:00:00.000Z"},{"tagline":"Weekdays 8.0-9.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\courage the cowardly dog\\courage the cowardly dog 32.mp4","name":"Courage the Cowardly Dog","episodeNumber":32,"runtime":1355.465,"playlistIndex":396,"startDate":"2022-11-30T13:01:02.973Z","endDate":"2022-11-30T13:23:38.438Z","info":{"image":"https://i.imgur.com/KD0PG3P.gif","episode":"Katz Under the Sea / Curtain of Cruelty"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\ed edd eddy\\ed edd eddy 47.mp4","name":"Ed Edd Eddy","episodeNumber":47,"runtime":657.024,"playlistIndex":397,"startDate":"2022-11-30T13:23:38.438Z","endDate":"2022-11-30T13:34:35.462Z","info":{"fullname":"Ed Edd n' Eddy","image":"https://i.imgur.com/igzgfih.gif","episode":"Ed in a Half Shell"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\johnny bravo\\johnny bravo 169.avi","name":"Johnny Bravo","episodeNumber":169,"runtime":650.893343,"playlistIndex":398,"startDate":"2022-11-30T13:34:35.462Z","endDate":"2022-11-30T13:45:26.355Z","info":{"image":"https://i.imgur.com/duW3ILx.gif"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\what a cartoon! show\\what a cartoon! show 14.avi","name":"What A Cartoon! Show","episodeNumber":14,"runtime":451.585,"playlistIndex":399,"startDate":"2022-11-30T13:45:26.355Z","endDate":"2022-11-30T13:52:57.940Z","info":{"image":"https://i.imgur.com/Vfe6dDZ.gif","episode":"The Powerpuff Girls: Crime 101"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\cow and chicken\\cow and chicken 57.avi","name":"Cow and Chicken","episodeNumber":57,"runtime":393.96,"playlistIndex":400,"startDate":"2022-11-30T13:52:57.940Z","endDate":"2022-11-30T13:59:31.900Z","info":{"image":"https://i.imgur.com/0QYl7ZQ.gif","episode":"Cow Fly"}}],"type":"block","name":"Cartoon Cartoon","runtime":3600,"runtimeTarget":3600,"rerun":true,"startDate":"2022-11-30T13:00:00.000Z","endDate":"2022-11-30T14:00:00.000Z"},{"tagline":"Weekdays 9.0-11.0pm","runtimeHoursTarget":2,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dragonball\\dragonball 146.mkv","name":"Dragonball","episodeNumber":146,"runtime":1244.243,"playlistIndex":405,"startDate":"2022-11-30T14:01:30.791Z","endDate":"2022-11-30T14:22:15.034Z","info":{"fullname":"Dragon Ball","image":"https://i.imgur.com/cQBxAVU.gif","episode":"Goku's Trap"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\sailor moon\\sailor moon 10.mp4","name":"Sailor Moon","episodeNumber":10,"runtime":1301.676,"playlistIndex":413,"startDate":"2022-11-30T14:25:54.752Z","endDate":"2022-11-30T14:47:36.428Z","info":{"image":"https://i.imgur.com/TnI0NkT.gif","year":1995,"episode":"Fight to the Finish"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 217.mkv","name":"DBZ","episodeNumber":217,"runtime":1244.693125,"playlistIndex":417,"startDate":"2022-11-30T14:48:51.597Z","endDate":"2022-11-30T15:09:36.290Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Magic Ball of Buu"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\dbz\\dbz 218.mkv","name":"DBZ","episodeNumber":218,"runtime":1250.648,"playlistIndex":425,"startDate":"2022-11-30T15:12:17.924Z","endDate":"2022-11-30T15:33:08.572Z","info":{"fullname":"Dragon Ball Z","image":"https://i.imgur.com/4qfad4o.gif","episode":"Buu Is Hatched!"}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\gundam wing\\gundam wing 23.mp4","name":"Gundam Wing","episodeNumber":23,"runtime":1416.790367,"playlistIndex":435,"startDate":"2022-11-30T15:36:23.209Z","endDate":"2022-11-30T16:00:00.000Z","info":{"image":"https://i.imgur.com/XWp96IJ.gif","episode":"Duo, the God of Death Once Again"}}],"type":"block","name":"Toonami","runtime":7199.999999999998,"runtimeTarget":7200,"rerun":true,"startDate":"2022-11-30T14:00:00.000Z","endDate":"2022-11-30T16:00:00.000Z"},{"tagline":"Weekdays 8.0-9.0pm","runtimeHoursTarget":1,"mediaList":[{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\space ghost c2c\\space ghost c2c 21.avi","name":"Space Ghost C2C","episodeNumber":20,"runtime":1372.437733,"playlistIndex":448,"startDate":"2022-11-30T16:05:05.936Z","endDate":"2022-11-30T16:27:58.373Z","info":{"fullname":"Space Ghost Coast to Coast","image":"https://i.imgur.com/7oi7Qxf.gif","year":1993}},{"type":"file","mediaType":"series","filepath":"t:\\toonami\\series\\home movies\\home movies 5.avi","name":"Home Movies","episodeNumber":5,"runtime":1307.2,"playlistIndex":460,"startDate":"2022-11-30T16:33:04.056Z","endDate":"2022-11-30T16:54:51.256Z","info":{"image":"https://i.imgur.com/VDMuEdj.gif","episode":"Yoko (aka We'll Always Have Tuesday)"}}],"type":"block","name":"Ghost Planet","runtime":3600,"runtimeTarget":3600,"rerun":true,"startDate":"2022-11-30T16:00:00.000Z","endDate":"2022-11-30T17:00:00.000Z"}],"modifiers":[{"swap":{"playlist":"April Fools"},"condition":{"holiday":"april fools"}},{"swap":{"playlist":"Halloween"},"condition":{"holiday":"halloween"}},{"swap":{"playlist":"Christmas Eve"},"condition":{"holiday":"christmas eve"}},{"swap":{"playlist":"Christmas"},"condition":{"holiday":"christmas"}}],"name":"Weekdays","type":"playlist","startDate":"2022-11-29T17:00:00.000Z","endDate":"2022-11-30T17:00:00.000Z"},"endDate":"2022-11-30T17:00:00.000Z"}
\ No newline at end of file
diff --git a/sites/toonamiaftermath.com/__data__/content01.json b/sites/toonamiaftermath.com/__data__/content01.json
new file mode 100644
index 000000000..83e6e51fe
--- /dev/null
+++ b/sites/toonamiaftermath.com/__data__/content01.json
@@ -0,0 +1,947 @@
+{
+ "_id": "6a216d80d02137d17554246e",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-03T16:00:00.000Z",
+ "playlist": {
+ "startTime": "12pm",
+ "blocks": [
+ {
+ "tagline": "Weekdays 12.0-2.0pm",
+ "runtimeHoursTarget": 1.9,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\x-men\\x-men 55.mkv",
+ "name": "X-Men",
+ "episodeNumber": 55,
+ "runtime": 1278.37775,
+ "playlistIndex": 1,
+ "startDate": "2026-07-03T16:00:30.231Z",
+ "endDate": "2026-07-03T16:21:48.608Z",
+ "info": {
+ "image": "https://i.imgur.com/ZSZ0x1m.gif",
+ "year": 1992,
+ "episode": "Proteus (Part 1)"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\mega man\\mega man 10.mkv",
+ "name": "Mega Man",
+ "episodeNumber": 10,
+ "runtime": 1436.87,
+ "playlistIndex": 4,
+ "startDate": "2026-07-03T16:22:30.222Z",
+ "endDate": "2026-07-03T16:46:27.092Z",
+ "info": {
+ "image": "https://i.imgur.com/vhvmTlP.gif",
+ "year": 1994,
+ "episode": "Ice Age"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\men in black\\men in black 22.avi",
+ "name": "Men in Black",
+ "episodeNumber": 22,
+ "runtime": 1281.015,
+ "playlistIndex": 8,
+ "startDate": "2026-07-03T16:47:05.546Z",
+ "endDate": "2026-07-03T17:08:26.561Z",
+ "info": {
+ "fullname": "Men in Black: The Series",
+ "image": "https://i.imgur.com/M2q5NRC.gif",
+ "episode": "The Fmall, Fmall World Syndrome"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\street fighter ii v\\street fighter ii v 14.mkv",
+ "name": "Street Fighter II V",
+ "episodeNumber": 14,
+ "runtime": 1423.68,
+ "playlistIndex": 12,
+ "startDate": "2026-07-03T17:09:08.794Z",
+ "endDate": "2026-07-03T17:32:52.474Z",
+ "info": {
+ "fullname": "Street Fighter II: V",
+ "image": "https://i.imgur.com/mQiuwRJ.gif",
+ "episode": "The Bloodthirsty Prince"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\spider-man\\spider-man 55.mp4",
+ "name": "Spider-Man",
+ "episodeNumber": 55,
+ "runtime": 1220.56,
+ "playlistIndex": 16,
+ "startDate": "2026-07-03T17:33:39.439Z",
+ "endDate": "2026-07-03T17:54:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/hprZiwl.gif",
+ "year": 1994,
+ "episode": "Six Forgotten Warriors, Chapter II: Unclaimed Legacy"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Marvel vs Capcom",
+ "runtime": 6840,
+ "runtimeTarget": 6840,
+ "startDate": "2026-07-03T16:00:00.000Z",
+ "endDate": "2026-07-03T17:54:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 2.0-4.0pm",
+ "runtimeHoursTarget": 2.1,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\thundercats\\thundercats 95.avi",
+ "name": "Thundercats",
+ "episodeNumber": 95,
+ "runtime": 1336.670003,
+ "playlistIndex": 20,
+ "startDate": "2026-07-03T17:56:00.588Z",
+ "endDate": "2026-07-03T18:18:17.258Z",
+ "info": {
+ "image": "https://i.imgur.com/7TOnnN5.gif",
+ "year": 1985,
+ "episode": "ThunderCubs (Part 5)"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\saint seiya\\saint seiya 59.mkv",
+ "name": "Saint Seiya",
+ "episodeNumber": 59,
+ "runtime": 1449.851,
+ "playlistIndex": 25,
+ "startDate": "2026-07-03T18:19:12.248Z",
+ "endDate": "2026-07-03T18:43:22.099Z",
+ "info": {
+ "image": "https://i.imgur.com/6rmD2nL.gif",
+ "episode": "Revive Swan! Life, Death, and Love"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\zeta gundam\\zeta gundam 18.mkv",
+ "name": "Zeta Gundam",
+ "episodeNumber": 18,
+ "runtime": 1453.577,
+ "playlistIndex": 30,
+ "startDate": "2026-07-03T18:44:17.481Z",
+ "endDate": "2026-07-03T19:08:31.058Z",
+ "info": {
+ "fullname": "Mobile Suit Zeta Gundam",
+ "image": "https://i.imgur.com/Tqe7v2I.gif",
+ "episode": "Mirai Captured"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\voltron\\voltron 59.mp4",
+ "name": "Voltron",
+ "episodeNumber": 59,
+ "runtime": 1391.36,
+ "playlistIndex": 35,
+ "startDate": "2026-07-03T19:09:10.557Z",
+ "endDate": "2026-07-03T19:32:21.917Z",
+ "info": {
+ "fullname": "Voltron: Defender of the Universe",
+ "image": "https://i.imgur.com/VUAvKNX.gif",
+ "episode": "Little Buddies"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\beast wars\\beast wars 13.avi",
+ "name": "Beast Wars",
+ "episodeNumber": 13,
+ "runtime": 1305.837867,
+ "playlistIndex": 41,
+ "startDate": "2026-07-03T19:33:49.799Z",
+ "endDate": "2026-07-03T19:55:35.636Z",
+ "info": {
+ "image": "https://i.imgur.com/1fov0VP.gif",
+ "episode": "The Spark"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Toonami O.G.",
+ "runtime": 7560,
+ "runtimeTarget": 7560,
+ "startDate": "2026-07-03T17:54:00.000Z",
+ "endDate": "2026-07-03T20:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 4.0-5.0pm",
+ "runtimeHoursTarget": 1,
+ "defaultCommercialBreak": {
+ "type": "commercialBreak",
+ "mediaType": "commercial",
+ "filter": {
+ "yearRange": {
+ "start": 1997,
+ "end": 2002
+ }
+ }
+ },
+ "breakInject": {
+ "enable": true,
+ "breaks": 1
+ },
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\pokemon\\pokemon 573.mkv",
+ "name": "Pokemon",
+ "episodeNumber": 556,
+ "runtime": 1277.409,
+ "seekEndTime": 584.238,
+ "playlistIndex": 48,
+ "startDate": "2026-07-03T20:00:00.000Z",
+ "endDate": "2026-07-03T20:25:02.985Z",
+ "info": {
+ "image": "https://i.imgur.com/VfdN6pP.gif",
+ "year": 1997,
+ "episode": "Playing the Leveling Field!"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\teen titans\\teen titans 31.mkv",
+ "name": "Teen Titans",
+ "episodeNumber": 31,
+ "runtime": 1361.86,
+ "seekEndTime": 488.477,
+ "playlistIndex": 65,
+ "startDate": "2026-07-03T20:29:03.309Z",
+ "endDate": "2026-07-03T20:55:39.133Z",
+ "info": {
+ "image": "https://i.imgur.com/Csz1Dr1.gif",
+ "year": 2003,
+ "episode": "Haunted"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Classic Toon",
+ "runtime": 3600,
+ "runtimeTarget": 3600,
+ "startDate": "2026-07-03T20:00:00.000Z",
+ "endDate": "2026-07-03T21:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 5.0-7.0pm",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dragonball\\dragonball 17.mkv",
+ "name": "Dragonball",
+ "episodeNumber": 17,
+ "runtime": 1244.201,
+ "playlistIndex": 87,
+ "startDate": "2026-07-03T21:01:30.791Z",
+ "endDate": "2026-07-03T21:22:14.992Z",
+ "info": {
+ "fullname": "Dragon Ball",
+ "image": "https://i.imgur.com/cQBxAVU.gif",
+ "episode": "Milk Delivery"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\sailor moon\\sailor moon 110.mp4",
+ "name": "Sailor Moon",
+ "episodeNumber": 110,
+ "runtime": 1416.811229,
+ "playlistIndex": 95,
+ "startDate": "2026-07-03T21:26:49.084Z",
+ "endDate": "2026-07-03T21:50:25.895Z",
+ "info": {
+ "image": "https://i.imgur.com/TnI0NkT.gif",
+ "year": 1995,
+ "episode": "Heightened Hazard"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dbz\\dbz 59.mkv",
+ "name": "DBZ",
+ "episodeNumber": 59,
+ "runtime": 1150.31,
+ "playlistIndex": 100,
+ "startDate": "2026-07-03T21:52:15.354Z",
+ "endDate": "2026-07-03T22:11:25.664Z",
+ "info": {
+ "fullname": "Dragon Ball Z",
+ "image": "https://i.imgur.com/4qfad4o.gif",
+ "episode": "Gohan Defeat Your Dad!"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dbz\\dbz 60.mkv",
+ "name": "DBZ",
+ "episodeNumber": 60,
+ "runtime": 1167.32,
+ "playlistIndex": 108,
+ "startDate": "2026-07-03T22:15:09.790Z",
+ "endDate": "2026-07-03T22:34:37.110Z",
+ "info": {
+ "fullname": "Dragon Ball Z",
+ "image": "https://i.imgur.com/4qfad4o.gif",
+ "episode": "Captain Ginyu... The Frog"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\zoids\\zoids 20.mp4",
+ "name": "Zoids",
+ "episodeNumber": 20,
+ "runtime": 1282.64,
+ "playlistIndex": 119,
+ "startDate": "2026-07-03T22:38:37.359Z",
+ "endDate": "2026-07-03T23:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/2Vh8RTx.gif",
+ "year": 2001,
+ "episode": "The Shadow Fox - Brad's Betrayal"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Toonami",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-03T21:00:00.000Z",
+ "endDate": "2026-07-03T23:00:00.000Z"
+ },
+ {
+ "tagline": "Fridays 7.0-8.0pm",
+ "runtimeHoursTarget": 1,
+ "allowOvertime": true,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "isSpecialFeature": true,
+ "name": "Lord Slug",
+ "filepath": "t:\\toonami\\movies\\lord slug.mp4",
+ "runtime": 3045.704,
+ "playlistIndex": 121,
+ "startDate": "2026-07-03T23:01:00.098Z",
+ "endDate": "2026-07-03T23:51:46.000Z",
+ "info": {
+ "fullname": "Dragon Ball Z: Lord Slug",
+ "image": "https://i.imgur.com/7hwf2B7.gif"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Special: DBZ Movie",
+ "runtime": 3105.802,
+ "runtimeTarget": 3600,
+ "startDate": "2026-07-03T23:00:00.000Z",
+ "endDate": "2026-07-03T23:51:46.000Z"
+ },
+ {
+ "tagline": "Weekdays 8.0-9.0pm",
+ "runtimeHoursTarget": 1,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\powerpuff girls\\powerpuff girls 43.mkv",
+ "name": "Powerpuff Girls",
+ "episodeNumber": 43,
+ "runtime": 1209.12,
+ "playlistIndex": 123,
+ "startDate": "2026-07-03T23:52:48.973Z",
+ "endDate": "2026-07-04T00:12:58.093Z",
+ "info": {
+ "fullname": "The Powerpuff Girls",
+ "image": "https://i.imgur.com/8ULe6pE.gif",
+ "episode": "Him Diddle Riddle"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\ed edd eddy\\ed edd eddy 50.mp4",
+ "name": "Ed Edd Eddy",
+ "episodeNumber": 50,
+ "runtime": 653.821,
+ "playlistIndex": 126,
+ "startDate": "2026-07-04T00:13:22.571Z",
+ "endDate": "2026-07-04T00:24:16.392Z",
+ "info": {
+ "fullname": "Ed Edd n' Eddy",
+ "image": "https://i.imgur.com/igzgfih.gif",
+ "episode": "High Heeled Ed"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dexters laboratory\\dexters laboratory 86.avi",
+ "name": "Dexters Laboratory",
+ "episodeNumber": 86,
+ "runtime": 651.083767,
+ "playlistIndex": 129,
+ "startDate": "2026-07-04T00:24:56.413Z",
+ "endDate": "2026-07-04T00:35:47.496Z",
+ "info": {
+ "fullname": "Dexter's Laboratory",
+ "image": "https://i.imgur.com/hMP6ON2.gif",
+ "episode": "The Muffin King"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\2 stupid dogs\\2 stupid dogs 2.mp4",
+ "name": "2 Stupid Dogs",
+ "episodeNumber": 2,
+ "runtime": 431.06,
+ "playlistIndex": 132,
+ "startDate": "2026-07-04T00:36:03.118Z",
+ "endDate": "2026-07-04T00:43:14.178Z",
+ "info": {
+ "image": "https://i.imgur.com/wQWDVZi.gif",
+ "episode": "Chameleon"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\johnny bravo\\johnny bravo 95.avi",
+ "name": "Johnny Bravo",
+ "episodeNumber": 95,
+ "runtime": 412.464,
+ "playlistIndex": 137,
+ "startDate": "2026-07-04T00:44:01.148Z",
+ "endDate": "2026-07-04T00:50:53.612Z",
+ "info": {
+ "image": "https://i.imgur.com/duW3ILx.gif",
+ "episode": "Send In The Clones"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\what a cartoon! show\\what a cartoon! show 39.avi",
+ "name": "What A Cartoon! Show",
+ "episodeNumber": 39,
+ "runtime": 441.374708,
+ "playlistIndex": 139,
+ "startDate": "2026-07-04T00:51:24.855Z",
+ "endDate": "2026-07-04T00:58:46.229Z",
+ "info": {
+ "image": "https://i.imgur.com/Vfe6dDZ.gif",
+ "episode": "Malcom and Melvin in Babe, He Calls Me"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Cartoon Cartoon",
+ "runtime": 4094.198,
+ "runtimeTarget": 4094.198,
+ "startDate": "2026-07-03T23:51:46.000Z",
+ "endDate": "2026-07-04T01:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 9.0-11.0pm",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dragonball\\dragonball 18.mkv",
+ "name": "Dragonball",
+ "episodeNumber": 18,
+ "runtime": 1244.201,
+ "playlistIndex": 145,
+ "startDate": "2026-07-04T01:01:30.791Z",
+ "endDate": "2026-07-04T01:22:14.992Z",
+ "info": {
+ "fullname": "Dragon Ball",
+ "image": "https://i.imgur.com/cQBxAVU.gif",
+ "episode": "The Turtle Hermit Way"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\sailor moon\\sailor moon 111.mp4",
+ "name": "Sailor Moon",
+ "episodeNumber": 111,
+ "runtime": 1417.92,
+ "playlistIndex": 151,
+ "startDate": "2026-07-04T01:25:33.158Z",
+ "endDate": "2026-07-04T01:49:11.078Z",
+ "info": {
+ "image": "https://i.imgur.com/TnI0NkT.gif",
+ "year": 1995,
+ "episode": "It's In The Cards"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dbz\\dbz 61.mkv",
+ "name": "DBZ",
+ "episodeNumber": 61,
+ "runtime": 1231.832,
+ "playlistIndex": 155,
+ "startDate": "2026-07-04T01:50:17.881Z",
+ "endDate": "2026-07-04T02:10:49.713Z",
+ "info": {
+ "fullname": "Dragon Ball Z",
+ "image": "https://i.imgur.com/4qfad4o.gif",
+ "episode": "Password is Porunga"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\dbz\\dbz 62.mkv",
+ "name": "DBZ",
+ "episodeNumber": 62,
+ "runtime": 1232.6,
+ "playlistIndex": 163,
+ "startDate": "2026-07-04T02:13:12.518Z",
+ "endDate": "2026-07-04T02:33:45.118Z",
+ "info": {
+ "fullname": "Dragon Ball Z",
+ "image": "https://i.imgur.com/4qfad4o.gif",
+ "episode": "Piccolo's Return"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\gundam wing\\gundam wing 11.mp4",
+ "name": "Gundam Wing",
+ "episodeNumber": 11,
+ "runtime": 1417.666244,
+ "playlistIndex": 171,
+ "startDate": "2026-07-04T02:36:22.333Z",
+ "endDate": "2026-07-04T03:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/XWp96IJ.gif",
+ "episode": "The Whereabouts of Happiness"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Toonami",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T01:00:00.000Z",
+ "endDate": "2026-07-04T03:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 8.0-9.0pm",
+ "runtimeHoursTarget": 1,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\space ghost c2c\\space ghost c2c 26.avi",
+ "name": "Space Ghost C2C",
+ "episodeNumber": 25,
+ "runtime": 814.246767,
+ "playlistIndex": 180,
+ "startDate": "2026-07-04T03:03:05.197Z",
+ "endDate": "2026-07-04T03:16:39.443Z",
+ "info": {
+ "fullname": "Space Ghost Coast to Coast",
+ "image": "https://i.imgur.com/7oi7Qxf.gif",
+ "year": 1993
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\home movies\\home movies 20.avi",
+ "name": "Home Movies",
+ "episodeNumber": 20,
+ "runtime": 1304.64,
+ "playlistIndex": 187,
+ "startDate": "2026-07-04T03:19:56.916Z",
+ "endDate": "2026-07-04T03:41:41.556Z",
+ "info": {
+ "image": "https://i.imgur.com/VDMuEdj.gif",
+ "episode": "Dad (Part 1)"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\brak show\\brak show 16.avi",
+ "name": "Brak Show",
+ "episodeNumber": 16,
+ "runtime": 671.637633,
+ "playlistIndex": 197,
+ "startDate": "2026-07-04T03:45:11.681Z",
+ "endDate": "2026-07-04T03:56:23.318Z",
+ "info": {
+ "image": "https://i.imgur.com/uGF2Olk.gif",
+ "episode": "Fued"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Ghost Planet",
+ "runtime": 3600,
+ "runtimeTarget": 3600,
+ "startDate": "2026-07-04T03:00:00.000Z",
+ "endDate": "2026-07-04T04:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 12.0-2.0am",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\trigun\\trigun 5.mp4",
+ "name": "Trigun",
+ "episodeNumber": 5,
+ "runtime": 1387.345,
+ "playlistIndex": 209,
+ "startDate": "2026-07-04T04:01:30.125Z",
+ "endDate": "2026-07-04T04:24:37.470Z",
+ "info": {
+ "image": "https://i.imgur.com/5Gde0JD.gif",
+ "episode": "Hard Puncher"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\yu yu hakusho\\yu yu hakusho 8.mp4",
+ "name": "Yu Yu Hakusho",
+ "episodeNumber": 8,
+ "runtime": 1421.42,
+ "playlistIndex": 211,
+ "startDate": "2026-07-04T04:25:07.753Z",
+ "endDate": "2026-07-04T04:48:49.173Z",
+ "info": {
+ "fullname": "Yu Yu Hakusho: Ghost Files",
+ "image": "https://i.imgur.com/zLgdAie.gif",
+ "episode": "The Three Eyes of Hiei"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\tenchi universe\\tenchi universe 6.mkv",
+ "name": "Tenchi Universe",
+ "episodeNumber": 6,
+ "runtime": 1405.643,
+ "playlistIndex": 214,
+ "startDate": "2026-07-04T04:49:34.880Z",
+ "endDate": "2026-07-04T05:13:00.523Z",
+ "info": {
+ "image": "https://i.imgur.com/lZ8iahD.gif",
+ "episode": "No Need for Resident Officers!"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\lupin iii\\lupin iii 20.mkv",
+ "name": "Lupin III",
+ "episodeNumber": 20,
+ "runtime": 1320.362,
+ "playlistIndex": 217,
+ "startDate": "2026-07-04T05:13:48.519Z",
+ "endDate": "2026-07-04T05:35:48.881Z",
+ "info": {
+ "fullname": "Lupin the 3rd",
+ "image": "https://i.imgur.com/ttnXgu9.gif",
+ "year": 1977,
+ "episode": "Hell Toupee"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\ranma\\ranma 106.mp4",
+ "name": "Ranma",
+ "episodeNumber": 106,
+ "runtime": 1397.227,
+ "playlistIndex": 221,
+ "startDate": "2026-07-04T05:36:42.773Z",
+ "endDate": "2026-07-04T06:00:00.000Z",
+ "info": {
+ "fullname": "Ranma 1/2",
+ "image": "https://i.imgur.com/GZNzBTy.gif",
+ "year": 1989,
+ "episode": "Dinner at Ringside!"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Midnight Run",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T04:00:00.000Z",
+ "endDate": "2026-07-04T06:00:00.000Z"
+ },
+ {
+ "tagline": "Weekdays 2.0-4.0am",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\escaflowne\\escaflowne 4.mp4",
+ "name": "Escaflowne",
+ "episodeNumber": 4,
+ "runtime": 1426.39,
+ "playlistIndex": 222,
+ "startDate": "2026-07-04T06:00:00.000Z",
+ "endDate": "2026-07-04T06:23:46.390Z",
+ "info": {
+ "image": "https://i.imgur.com/WlxuoW6.gif",
+ "episode": "The Diabolical Adonis"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\12 oz mouse\\12 oz mouse 18.avi",
+ "name": "12 oz Mouse",
+ "episodeNumber": 18,
+ "runtime": 690.1895,
+ "playlistIndex": 235,
+ "startDate": "2026-07-04T06:28:15.887Z",
+ "endDate": "2026-07-04T06:39:46.076Z",
+ "info": {
+ "image": "https://i.imgur.com/VxDpdPC.gif",
+ "episode": "Pre-Reckoning"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\serial experiments lain\\serial experiments lain 11.mkv",
+ "name": "Serial Experiments Lain",
+ "episodeNumber": 11,
+ "runtime": 1217.675,
+ "playlistIndex": 246,
+ "startDate": "2026-07-04T06:44:13.302Z",
+ "endDate": "2026-07-04T07:04:30.977Z",
+ "info": {
+ "image": "https://i.imgur.com/42cuq2g.gif",
+ "episode": "Infornography"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\shin chan\\shin chan 33.mp4",
+ "name": "Shin Chan",
+ "episodeNumber": 33,
+ "runtime": 1419.952,
+ "playlistIndex": 258,
+ "startDate": "2026-07-04T07:09:13.320Z",
+ "endDate": "2026-07-04T07:32:53.272Z",
+ "info": {
+ "image": "https://i.imgur.com/XWL4wlj.gif",
+ "episode": "Tummy Clock Says It's Three"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\slayers\\slayers 14.mkv",
+ "name": "Slayers",
+ "episodeNumber": 14,
+ "runtime": 1345.344,
+ "playlistIndex": 272,
+ "startDate": "2026-07-04T07:37:34.655Z",
+ "endDate": "2026-07-04T08:00:00.000Z",
+ "info": {
+ "fullname": "The Slayers",
+ "image": "https://i.imgur.com/izHAHny.gif",
+ "year": 1995,
+ "episode": "NAVIGATION! An Invitation To Sairaag!"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "All Kids Outta The Pool",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T06:00:00.000Z",
+ "endDate": "2026-07-04T08:00:00.000Z"
+ },
+ {
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - dont be a bloody idiot.mp4",
+ "runtime": 1005.872,
+ "playlistIndex": 273,
+ "startDate": "2026-07-04T08:00:00.000Z",
+ "endDate": "2026-07-04T08:16:45.872Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - one got fat.mp4",
+ "runtime": 895.028,
+ "playlistIndex": 277,
+ "startDate": "2026-07-04T08:18:13.853Z",
+ "endDate": "2026-07-04T08:33:08.881Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - buying food.mp4",
+ "runtime": 689.122,
+ "playlistIndex": 282,
+ "startDate": "2026-07-04T08:34:35.792Z",
+ "endDate": "2026-07-04T08:46:04.914Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - playing together.mp4",
+ "runtime": 616.116,
+ "playlistIndex": 286,
+ "startDate": "2026-07-04T08:47:36.004Z",
+ "endDate": "2026-07-04T08:57:52.120Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - fad diet circus.mp4",
+ "runtime": 611.745,
+ "playlistIndex": 290,
+ "startDate": "2026-07-04T08:59:21.487Z",
+ "endDate": "2026-07-04T09:09:33.232Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - carnivorous plants.mp4",
+ "runtime": 601.101,
+ "playlistIndex": 294,
+ "startDate": "2026-07-04T09:11:02.366Z",
+ "endDate": "2026-07-04T09:21:03.467Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - whatever the weather.mp4",
+ "runtime": 588.689,
+ "playlistIndex": 298,
+ "startDate": "2026-07-04T09:22:34.923Z",
+ "endDate": "2026-07-04T09:32:23.612Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - down and out.mp4",
+ "runtime": 551.685,
+ "playlistIndex": 303,
+ "startDate": "2026-07-04T09:33:55.574Z",
+ "endDate": "2026-07-04T09:43:07.259Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - why doesn't cathy eat breakfast - petaluma chicken.mp4",
+ "runtime": 468.635,
+ "playlistIndex": 308,
+ "startDate": "2026-07-04T09:44:39.247Z",
+ "endDate": "2026-07-04T09:52:27.882Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - one turkey two turkey.mp4",
+ "runtime": 358.992,
+ "playlistIndex": 312,
+ "startDate": "2026-07-04T09:54:01.008Z",
+ "endDate": "2026-07-04T10:00:00.000Z"
+ }
+ ],
+ "type": "block",
+ "name": "Rifftrax Shorts",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T08:00:00.000Z",
+ "endDate": "2026-07-04T10:00:00.000Z"
+ }
+ ],
+ "modifiers": [
+ {
+ "swap": {
+ "playlist": "April Fools"
+ },
+ "condition": {
+ "holiday": "april fools"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Halloween"
+ },
+ "condition": {
+ "holiday": "halloween"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Christmas Eve"
+ },
+ "condition": {
+ "holiday": "christmas eve"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Christmas"
+ },
+ "condition": {
+ "holiday": "christmas"
+ }
+ }
+ ],
+ "name": "Weekdays",
+ "type": "playlist",
+ "startDate": "2026-07-03T16:00:00.000Z",
+ "endDate": "2026-07-04T10:00:00.000Z"
+ },
+ "endDate": "2026-07-04T10:00:00.000Z"
+}
\ No newline at end of file
diff --git a/sites/toonamiaftermath.com/__data__/content02.json b/sites/toonamiaftermath.com/__data__/content02.json
new file mode 100644
index 000000000..ca1c84a11
--- /dev/null
+++ b/sites/toonamiaftermath.com/__data__/content02.json
@@ -0,0 +1,962 @@
+{
+ "_id": "6a22befed02137d17593d644",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-04T10:00:00.000Z",
+ "playlist": {
+ "startTime": "6am",
+ "blocks": [
+ {
+ "tagline": "Weekends 6.0-8.0am",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\spiderman\\spiderman 7.avi",
+ "name": "Spiderman",
+ "episodeNumber": 7,
+ "runtime": 653.069083,
+ "playlistIndex": 0,
+ "startDate": "2026-07-04T10:00:00.000Z",
+ "endDate": "2026-07-04T10:10:53.069Z",
+ "info": {
+ "fullname": "Spider-Man",
+ "image": "https://i.imgur.com/rtVhGpO.gif",
+ "year": 1967,
+ "episode": "The Sky is Falling"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\spiderman\\spiderman 8.avi",
+ "name": "Spiderman",
+ "episodeNumber": 8,
+ "runtime": 652.1515,
+ "playlistIndex": 2,
+ "startDate": "2026-07-04T10:11:52.629Z",
+ "endDate": "2026-07-04T10:22:44.780Z",
+ "info": {
+ "fullname": "Spider-Man",
+ "image": "https://i.imgur.com/rtVhGpO.gif",
+ "year": 1967,
+ "episode": "Captured by J. Jonah Jameson"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\spiderman\\spiderman 9.avi",
+ "name": "Spiderman",
+ "episodeNumber": 9,
+ "runtime": 651.692708,
+ "playlistIndex": 5,
+ "startDate": "2026-07-04T10:24:01.335Z",
+ "endDate": "2026-07-04T10:34:53.027Z",
+ "info": {
+ "fullname": "Spider-Man",
+ "image": "https://i.imgur.com/rtVhGpO.gif",
+ "year": 1967,
+ "episode": "Never Step on a Scorpion"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\spiderman\\spiderman 10.avi",
+ "name": "Spiderman",
+ "episodeNumber": 10,
+ "runtime": 650.858542,
+ "playlistIndex": 8,
+ "startDate": "2026-07-04T10:36:03.388Z",
+ "endDate": "2026-07-04T10:46:54.246Z",
+ "info": {
+ "fullname": "Spider-Man",
+ "image": "https://i.imgur.com/rtVhGpO.gif",
+ "year": 1967,
+ "episode": "Sands of Crime"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\fantastic four\\fantastic four 18.avi",
+ "name": "Fantastic Four",
+ "episodeNumber": 18,
+ "runtime": 1224.56,
+ "playlistIndex": 13,
+ "startDate": "2026-07-04T10:48:20.992Z",
+ "endDate": "2026-07-04T11:08:45.552Z",
+ "info": {
+ "image": "https://i.imgur.com/Stqcavd.gif",
+ "year": 1967,
+ "episode": "Rama-Tut"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\iron man\\iron man 5.avi",
+ "name": "Iron Man",
+ "episodeNumber": 5,
+ "runtime": 1038.210612,
+ "playlistIndex": 17,
+ "startDate": "2026-07-04T11:10:10.139Z",
+ "endDate": "2026-07-04T11:27:28.349Z",
+ "info": {
+ "image": "https://i.imgur.com/ZkugjMx.gif",
+ "year": 1966,
+ "episode": "Crimson Dynamo!, The Crimson Dynamo Strikes, Captured"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\birdman\\birdman 29.avi",
+ "name": "Birdman",
+ "episodeNumber": 29,
+ "runtime": 387.653933,
+ "playlistIndex": 22,
+ "startDate": "2026-07-04T11:28:42.874Z",
+ "endDate": "2026-07-04T11:35:10.527Z",
+ "info": {
+ "image": "https://i.imgur.com/cAylbtL.gif",
+ "year": 1967,
+ "episode": "Birdman Meets Moray of the Deep"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\birdman\\birdman 30.avi",
+ "name": "Birdman",
+ "episodeNumber": 30,
+ "runtime": 389.4891,
+ "playlistIndex": 27,
+ "startDate": "2026-07-04T11:36:31.830Z",
+ "endDate": "2026-07-04T11:43:01.319Z",
+ "info": {
+ "image": "https://i.imgur.com/cAylbtL.gif",
+ "year": 1967,
+ "episode": "Birdman and the Monster of the Mountains"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\space ghost\\space ghost 21.avi",
+ "name": "Space Ghost",
+ "episodeNumber": 21,
+ "runtime": 379.5792,
+ "playlistIndex": 31,
+ "startDate": "2026-07-04T11:45:30.325Z",
+ "endDate": "2026-07-04T11:51:49.904Z",
+ "info": {
+ "image": "https://i.imgur.com/TKjCB1Z.gif",
+ "year": 1966,
+ "episode": "Space Birds"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\space ghost\\space ghost 22.avi",
+ "name": "Space Ghost",
+ "episodeNumber": 22,
+ "runtime": 379.379,
+ "playlistIndex": 39,
+ "startDate": "2026-07-04T11:53:40.616Z",
+ "endDate": "2026-07-04T12:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/TKjCB1Z.gif",
+ "year": 1966,
+ "episode": "Attack of the Saucer Crab"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Comic Corner",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T10:00:00.000Z",
+ "endDate": "2026-07-04T12:00:00.000Z"
+ },
+ {
+ "tagline": "Weekends 8.0-10.0am",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\earthworm jim\\earthworm jim 1.mkv",
+ "name": "Earthworm Jim",
+ "episodeNumber": 1,
+ "runtime": 1275.28,
+ "playlistIndex": 40,
+ "startDate": "2026-07-04T12:00:00.000Z",
+ "endDate": "2026-07-04T12:21:15.280Z",
+ "info": {
+ "image": "https://i.imgur.com/sQB7OBu.gif",
+ "episode": "Sidekicked"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\static shock\\static shock 1.avi",
+ "name": "Static Shock",
+ "episodeNumber": 1,
+ "runtime": 1269.548,
+ "playlistIndex": 47,
+ "startDate": "2026-07-04T12:24:33.550Z",
+ "endDate": "2026-07-04T12:45:43.098Z",
+ "info": {
+ "image": "https://i.imgur.com/riIBi2T.gif",
+ "episode": "Shock to the System"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\animaniacs\\animaniacs 9.mp4",
+ "name": "Animaniacs",
+ "episodeNumber": 9,
+ "runtime": 1276.108,
+ "playlistIndex": 55,
+ "startDate": "2026-07-04T12:49:17.023Z",
+ "endDate": "2026-07-04T13:10:33.131Z",
+ "info": {
+ "image": "https://i.imgur.com/Iahwehb.gif",
+ "episode": "Wally Llama / Where Rodents Dare"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\tick\\tick 30.mkv",
+ "name": "Tick",
+ "episodeNumber": 30,
+ "runtime": 1201.184,
+ "playlistIndex": 65,
+ "startDate": "2026-07-04T13:14:35.406Z",
+ "endDate": "2026-07-04T13:34:36.590Z",
+ "info": {
+ "fullname": "The Tick",
+ "image": "https://i.imgur.com/6LCtAKv.gif",
+ "year": 1994,
+ "episode": "Tick vs. Arthur"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\freakazoid\\freakazoid 7.avi",
+ "name": "Freakazoid",
+ "episodeNumber": 7,
+ "runtime": 1283.04,
+ "playlistIndex": 75,
+ "startDate": "2026-07-04T13:38:36.960Z",
+ "endDate": "2026-07-04T14:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/qaSxxx8.gif",
+ "episode": "The Chip (Part 2) /Freakazoid Is History"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Kids WB",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T12:00:00.000Z",
+ "endDate": "2026-07-04T14:00:00.000Z"
+ },
+ {
+ "tagline": "Weekends 10.0-12.0pm",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\digimon\\digimon 9.avi",
+ "name": "Digimon",
+ "episodeNumber": 9,
+ "runtime": 1233.232,
+ "playlistIndex": 78,
+ "startDate": "2026-07-04T14:00:45.548Z",
+ "endDate": "2026-07-04T14:21:18.780Z",
+ "info": {
+ "image": "https://i.imgur.com/rM5a4vc.gif",
+ "episode": "Subzero Ice Punch!"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\monster rancher\\monster rancher 34.mkv",
+ "name": "Monster Rancher",
+ "episodeNumber": 34,
+ "runtime": 1278.538,
+ "playlistIndex": 86,
+ "startDate": "2026-07-04T14:24:47.946Z",
+ "endDate": "2026-07-04T14:46:06.484Z",
+ "info": {
+ "fullname": "Monster Rancher",
+ "image": "https://i.imgur.com/8Q2xfrx.gif",
+ "episode": "The Town That Disappeared"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\yu-gi-oh!\\yu-gi-oh! 56.avi",
+ "name": "Yu-Gi-Oh!",
+ "episodeNumber": 56,
+ "runtime": 1219.302636,
+ "playlistIndex": 94,
+ "startDate": "2026-07-04T14:49:24.232Z",
+ "endDate": "2026-07-04T15:09:43.534Z",
+ "info": {
+ "image": "https://i.imgur.com/F5wIvS0.gif",
+ "episode": "Yugi VS the Rare Hunter (Part 1)"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\starship troopers\\starship troopers 15.mp4",
+ "name": "Starship Troopers",
+ "episodeNumber": 15,
+ "runtime": 1251.563,
+ "playlistIndex": 106,
+ "startDate": "2026-07-04T15:13:55.492Z",
+ "endDate": "2026-07-04T15:34:47.055Z",
+ "info": {
+ "fullname": "Roughnecks: Starship Troopers Chronicles",
+ "image": "https://i.imgur.com/aRS8xZQ.gif",
+ "episode": "The Face Of Truth"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\beast machines\\beast machines 4.avi",
+ "name": "Beast Machines",
+ "episodeNumber": 4,
+ "runtime": 1289.064,
+ "playlistIndex": 115,
+ "startDate": "2026-07-04T15:38:30.934Z",
+ "endDate": "2026-07-04T16:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/9E7F997.gif",
+ "episode": "Mercenary Pursuits"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Rising Sun",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T14:00:00.000Z",
+ "endDate": "2026-07-04T16:00:00.000Z"
+ },
+ {
+ "tagline": "Weekends 12.0-2.0pm",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\jonny quest real adventures\\jonny quest real adventures 18.avi",
+ "name": "Jonny Quest Real Adventures",
+ "episodeNumber": 18,
+ "runtime": 1261.28,
+ "playlistIndex": 117,
+ "startDate": "2026-07-04T16:01:28.680Z",
+ "endDate": "2026-07-04T16:22:29.960Z",
+ "info": {
+ "fullname": "The Real Adventures of Jonny Quest",
+ "image": "https://i.imgur.com/XOp3nEP.gif",
+ "episode": "The Mummies of Malenque"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\jonny quest real adventures\\jonny quest real adventures 19.avi",
+ "name": "Jonny Quest Real Adventures",
+ "episodeNumber": 19,
+ "runtime": 1255.44,
+ "playlistIndex": 121,
+ "startDate": "2026-07-04T16:23:39.593Z",
+ "endDate": "2026-07-04T16:44:35.033Z",
+ "info": {
+ "fullname": "The Real Adventures of Jonny Quest",
+ "image": "https://i.imgur.com/XOp3nEP.gif",
+ "episode": "Bloodlines"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\jonny quest\\jonny quest 25.avi",
+ "name": "Jonny Quest",
+ "episodeNumber": 25,
+ "runtime": 1512.0105,
+ "playlistIndex": 124,
+ "startDate": "2026-07-04T16:45:43.671Z",
+ "endDate": "2026-07-04T17:10:55.681Z",
+ "info": {
+ "image": "https://i.imgur.com/1LkPW7k.gif",
+ "year": 1964,
+ "episode": "The Sea Haunt"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\scooby doo\\scooby doo 20.mp4",
+ "name": "Scooby Doo",
+ "episodeNumber": 20,
+ "runtime": 1315.272,
+ "playlistIndex": 130,
+ "startDate": "2026-07-04T17:12:10.059Z",
+ "endDate": "2026-07-04T17:34:05.331Z",
+ "info": {
+ "fullname": "Scooby Doo, Where Are You!",
+ "image": "https://i.imgur.com/i1ZedHL.gif",
+ "episode": "Jeepers, It's the Creeper"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\scooby doo\\scooby doo 21.mp4",
+ "name": "Scooby Doo",
+ "episodeNumber": 21,
+ "runtime": 1315.272,
+ "playlistIndex": 135,
+ "startDate": "2026-07-04T17:35:30.754Z",
+ "endDate": "2026-07-04T17:57:26.026Z",
+ "info": {
+ "fullname": "Scooby Doo, Where Are You!",
+ "image": "https://i.imgur.com/i1ZedHL.gif",
+ "episode": "Scooby's Night with a Frozen Fright"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Cartoon High Noon",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T16:00:00.000Z",
+ "endDate": "2026-07-04T18:00:00.000Z"
+ },
+ {
+ "tagline": "Weekends 2.0-4.0pm",
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\superman\\superman 15.avi",
+ "name": "Superman",
+ "episodeNumber": 15,
+ "runtime": 1286.287,
+ "playlistIndex": 140,
+ "startDate": "2026-07-04T18:00:30.256Z",
+ "endDate": "2026-07-04T18:21:56.543Z",
+ "info": {
+ "image": "https://i.imgur.com/hUYhp5I.gif",
+ "year": 1996,
+ "episode": "Blasts From the Past (Part 2)"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\batman\\batman 49.mp4",
+ "name": "Batman",
+ "episodeNumber": 49,
+ "runtime": 1342.763,
+ "playlistIndex": 144,
+ "startDate": "2026-07-04T18:24:06.302Z",
+ "endDate": "2026-07-04T18:46:29.065Z",
+ "info": {
+ "fullname": "Batman: The Animated Series",
+ "image": "https://i.imgur.com/nygJi6C.gif",
+ "episode": "Heart of Steel Part 1"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\batman beyond\\batman beyond 41.avi",
+ "name": "Batman Beyond",
+ "episodeNumber": 41,
+ "runtime": 1264.263,
+ "playlistIndex": 150,
+ "startDate": "2026-07-04T18:48:39.220Z",
+ "endDate": "2026-07-04T19:09:43.483Z",
+ "info": {
+ "image": "https://i.imgur.com/4bXZkXc.gif",
+ "episode": "Untouchable"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\justice league\\justice league 35.avi",
+ "name": "Justice League",
+ "episodeNumber": 35,
+ "runtime": 1372.162458,
+ "playlistIndex": 156,
+ "startDate": "2026-07-04T19:11:37.615Z",
+ "endDate": "2026-07-04T19:34:29.777Z",
+ "info": {
+ "image": "https://i.imgur.com/IAoWUJN.gif",
+ "year": 2001,
+ "episode": "Hearts and Minds: Part 1"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\justice league\\justice league 36.avi",
+ "name": "Justice League",
+ "episodeNumber": 36,
+ "runtime": 1401.14975,
+ "playlistIndex": 162,
+ "startDate": "2026-07-04T19:36:38.849Z",
+ "endDate": "2026-07-04T20:00:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/IAoWUJN.gif",
+ "year": 2001,
+ "episode": "Hearts and Minds: Part 2"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Hall of Justice",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-04T18:00:00.000Z",
+ "endDate": "2026-07-04T20:00:00.000Z"
+ },
+ {
+ "tagline": "Weekends 4.0-6.0pm",
+ "runtimeHoursTarget": 2.3,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\gaogaigar\\gaogaigar 18.mkv",
+ "name": "GaoGaiGar",
+ "episodeNumber": 18,
+ "runtime": 1460.459,
+ "playlistIndex": 163,
+ "startDate": "2026-07-04T20:00:00.000Z",
+ "endDate": "2026-07-04T20:24:20.459Z",
+ "info": {
+ "image": "https://i.imgur.com/5rCBrb9.gif",
+ "episode": "A Promise is the Light of another"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\big o\\big o 21.mkv",
+ "name": "Big O",
+ "episodeNumber": 21,
+ "runtime": 1427.655,
+ "playlistIndex": 170,
+ "startDate": "2026-07-04T20:27:07.723Z",
+ "endDate": "2026-07-04T20:50:55.378Z",
+ "info": {
+ "image": "https://i.imgur.com/0JJXLwO.gif",
+ "episode": "The Third Big"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\patlabor\\patlabor 14.mkv",
+ "name": "Patlabor",
+ "episodeNumber": 14,
+ "runtime": 1483.112,
+ "playlistIndex": 173,
+ "startDate": "2026-07-04T20:53:06.041Z",
+ "endDate": "2026-07-04T21:17:49.153Z",
+ "info": {
+ "fullname": "Patlabor: The Mobile Police",
+ "image": "https://i.imgur.com/lP8LKsc.gif",
+ "episode": "You Win!"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\gundam 0083\\gundam 0083 1.mkv",
+ "name": "Gundam 0083",
+ "episodeNumber": 1,
+ "rotationPremiere": true,
+ "runtime": 1615.696,
+ "playlistIndex": 178,
+ "startDate": "2026-07-04T21:20:42.059Z",
+ "endDate": "2026-07-04T21:47:37.755Z",
+ "info": {
+ "fullname": "Mobile Suit Gundam 0083: Stardust Memory",
+ "image": "https://i.imgur.com/6Gm5ykC.gif",
+ "episode": "Gundamjack"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\gundam 0083\\gundam 0083 2.mkv",
+ "name": "Gundam 0083",
+ "episodeNumber": 2,
+ "runtime": 1640.512,
+ "playlistIndex": 185,
+ "startDate": "2026-07-04T21:50:39.488Z",
+ "endDate": "2026-07-04T22:18:00.000Z",
+ "info": {
+ "fullname": "Mobile Suit Gundam 0083: Stardust Memory",
+ "image": "https://i.imgur.com/6Gm5ykC.gif",
+ "episode": "Endless Pursuit"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Giant Robot Hour",
+ "runtime": 8280,
+ "runtimeTarget": 8280,
+ "startDate": "2026-07-04T20:00:00.000Z",
+ "endDate": "2026-07-04T22:18:00.000Z"
+ },
+ {
+ "tagline": "Weekends 6.0-8.0pm",
+ "runtimeHoursTarget": 2.1,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\celebrity deathmatch\\celebrity deathmatch 77.mp4",
+ "name": "Celebrity Deathmatch",
+ "episodeNumber": 77,
+ "runtime": 1286.921,
+ "playlistIndex": 186,
+ "startDate": "2026-07-04T22:18:00.000Z",
+ "endDate": "2026-07-04T22:39:26.921Z",
+ "info": {
+ "image": "https://i.imgur.com/asKW14D.gif",
+ "episode": "Rockstarmagedon"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\initial d\\initial d 43.mkv",
+ "name": "Initial D",
+ "episodeNumber": 43,
+ "runtime": 1642.132,
+ "playlistIndex": 188,
+ "startDate": "2026-07-04T22:39:43.547Z",
+ "endDate": "2026-07-04T23:07:05.679Z",
+ "info": {
+ "image": "https://i.imgur.com/WzNYM0K.gif",
+ "episode": "Full Throttle! Downhill Battle"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\initial d\\initial d 44.mkv",
+ "name": "Initial D",
+ "episodeNumber": 44,
+ "runtime": 1642.09,
+ "playlistIndex": 189,
+ "startDate": "2026-07-04T23:07:05.679Z",
+ "endDate": "2026-07-04T23:34:27.769Z",
+ "info": {
+ "image": "https://i.imgur.com/WzNYM0K.gif",
+ "episode": "The Strongest Man of the Todo School"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\fighting spirit\\fighting spirit 20.mkv",
+ "name": "Fighting Spirit",
+ "episodeNumber": 20,
+ "runtime": 1445.912,
+ "playlistIndex": 191,
+ "startDate": "2026-07-04T23:34:57.366Z",
+ "endDate": "2026-07-04T23:59:03.278Z",
+ "info": {
+ "image": "https://i.imgur.com/q17pj8O.gif",
+ "year": 2000,
+ "episode": "The Threat of Shotgun"
+ }
+ },
+ {
+ "type": "file",
+ "mediaType": "series",
+ "filepath": "t:\\toonami\\series\\fighting spirit\\fighting spirit 21.mkv",
+ "name": "Fighting Spirit",
+ "episodeNumber": 21,
+ "runtime": 1444.525,
+ "playlistIndex": 195,
+ "startDate": "2026-07-04T23:59:55.475Z",
+ "endDate": "2026-07-05T00:24:00.000Z",
+ "info": {
+ "image": "https://i.imgur.com/q17pj8O.gif",
+ "year": 2000,
+ "episode": "The Way to Capture a Prodigy"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Toonami After 8: The Ocho",
+ "runtime": 7560,
+ "runtimeTarget": 7560,
+ "startDate": "2026-07-04T22:18:00.000Z",
+ "endDate": "2026-07-05T00:24:00.000Z"
+ },
+ {
+ "runtimeHoursTarget": 4.1,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "name": "Team America World Police",
+ "filepath": "t:\\toonami\\specials\\independence day\\team america world police.mp4",
+ "runtime": 5862.165333,
+ "playlistIndex": 196,
+ "startDate": "2026-07-05T00:24:00.000Z",
+ "endDate": "2026-07-05T02:01:42.165Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "name": "Rifftrax - Independence Day",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax - independence day.mp4",
+ "runtime": 8822.928,
+ "playlistIndex": 200,
+ "startDate": "2026-07-05T02:02:57.071Z",
+ "endDate": "2026-07-05T04:30:00.000Z"
+ }
+ ],
+ "type": "block",
+ "name": "Special: Independence Day",
+ "runtime": 14760,
+ "runtimeTarget": 14760,
+ "startDate": "2026-07-05T00:24:00.000Z",
+ "endDate": "2026-07-05T04:30:00.000Z"
+ },
+ {
+ "tagline": "Saturdays 11.0pm",
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "isSpecialFeature": true,
+ "name": "Interstella 5555",
+ "filepath": "t:\\toonami\\movies\\interstella 5555.mp4",
+ "runtime": 3909.9,
+ "playlistIndex": 202,
+ "startDate": "2026-07-05T04:31:00.098Z",
+ "endDate": "2026-07-05T05:36:10.000Z",
+ "info": {
+ "image": "https://i.imgur.com/ODBlBOU.gif"
+ }
+ }
+ ],
+ "type": "block",
+ "name": "Special: Interstella 5555",
+ "runtime": 3969.998,
+ "startDate": "2026-07-05T04:30:00.000Z",
+ "endDate": "2026-07-05T05:36:10.000Z"
+ },
+ {
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "name": "Rifftrax - Star Wars VI",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax - star wars vi.mp4",
+ "runtime": 8087.997,
+ "playlistIndex": 203,
+ "startDate": "2026-07-05T05:36:10.000Z",
+ "endDate": "2026-07-05T07:50:57.997Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "name": "Rifftrax - Laser Mission",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax - laser mission.mp4",
+ "runtime": 5080.943,
+ "playlistIndex": 205,
+ "startDate": "2026-07-05T07:53:07.172Z",
+ "endDate": "2026-07-05T09:17:48.115Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "movie",
+ "name": "MST3K - S09E10 - The Final Sacrifice",
+ "filepath": "t:\\toonami\\mst3k\\mst3k - s09e10 - the final sacrifice.avi",
+ "runtime": 5513.913914,
+ "playlistIndex": 207,
+ "startDate": "2026-07-05T09:18:07.820Z",
+ "endDate": "2026-07-05T10:50:02.000Z"
+ }
+ ],
+ "type": "block",
+ "name": "Toonami AfterParty",
+ "runtime": 18831.733914,
+ "startDate": "2026-07-05T05:36:10.000Z",
+ "endDate": "2026-07-05T10:50:02.000Z"
+ },
+ {
+ "runtimeHoursTarget": 2,
+ "mediaList": [
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - dont be a bloody idiot.mp4",
+ "runtime": 1005.872,
+ "playlistIndex": 208,
+ "startDate": "2026-07-05T10:50:02.000Z",
+ "endDate": "2026-07-05T11:06:47.872Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - one got fat.mp4",
+ "runtime": 895.028,
+ "playlistIndex": 212,
+ "startDate": "2026-07-05T11:08:15.853Z",
+ "endDate": "2026-07-05T11:23:10.881Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - buying food.mp4",
+ "runtime": 689.122,
+ "playlistIndex": 217,
+ "startDate": "2026-07-05T11:24:37.792Z",
+ "endDate": "2026-07-05T11:36:06.914Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - playing together.mp4",
+ "runtime": 616.116,
+ "playlistIndex": 221,
+ "startDate": "2026-07-05T11:37:38.004Z",
+ "endDate": "2026-07-05T11:47:54.120Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - fad diet circus.mp4",
+ "runtime": 611.745,
+ "playlistIndex": 225,
+ "startDate": "2026-07-05T11:49:23.487Z",
+ "endDate": "2026-07-05T11:59:35.232Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - carnivorous plants.mp4",
+ "runtime": 601.101,
+ "playlistIndex": 229,
+ "startDate": "2026-07-05T12:01:04.366Z",
+ "endDate": "2026-07-05T12:11:05.467Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - whatever the weather.mp4",
+ "runtime": 588.689,
+ "playlistIndex": 233,
+ "startDate": "2026-07-05T12:12:36.923Z",
+ "endDate": "2026-07-05T12:22:25.612Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - down and out.mp4",
+ "runtime": 551.685,
+ "playlistIndex": 238,
+ "startDate": "2026-07-05T12:23:57.574Z",
+ "endDate": "2026-07-05T12:33:09.259Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - why doesn't cathy eat breakfast - petaluma chicken.mp4",
+ "runtime": 468.635,
+ "playlistIndex": 243,
+ "startDate": "2026-07-05T12:34:41.247Z",
+ "endDate": "2026-07-05T12:42:29.882Z"
+ },
+ {
+ "type": "file",
+ "mediaType": "short",
+ "filepath": "t:\\toonami\\rifftrax\\rifftrax shorts\\rifftrax - one turkey two turkey.mp4",
+ "runtime": 358.992,
+ "playlistIndex": 247,
+ "startDate": "2026-07-05T12:44:03.008Z",
+ "endDate": "2026-07-05T12:50:02.000Z"
+ }
+ ],
+ "type": "block",
+ "name": "Rifftrax Shorts",
+ "runtime": 7200,
+ "runtimeTarget": 7200,
+ "startDate": "2026-07-05T10:50:02.000Z",
+ "endDate": "2026-07-05T12:50:02.000Z",
+ "rerun": true
+ }
+ ],
+ "modifiers": [
+ {
+ "swap": {
+ "playlist": "April Fools"
+ },
+ "condition": {
+ "holiday": "april fools"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Halloween"
+ },
+ "condition": {
+ "holiday": "halloween"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Christmas Eve"
+ },
+ "condition": {
+ "holiday": "christmas eve"
+ }
+ },
+ {
+ "swap": {
+ "playlist": "Christmas"
+ },
+ "condition": {
+ "holiday": "christmas"
+ }
+ }
+ ],
+ "name": "Weekends",
+ "type": "playlist",
+ "startDate": "2026-07-04T10:00:00.000Z",
+ "endDate": "2026-07-05T12:50:02.000Z"
+ },
+ "endDate": "2026-07-05T12:50:02.000Z"
+}
\ No newline at end of file
diff --git a/sites/toonamiaftermath.com/__data__/playlists.json b/sites/toonamiaftermath.com/__data__/playlists.json
index e95e1cb27..dc426a254 100644
--- a/sites/toonamiaftermath.com/__data__/playlists.json
+++ b/sites/toonamiaftermath.com/__data__/playlists.json
@@ -1 +1,44 @@
-[{"_id":"635e6c0917f6824d95312bf7","scheduleName":"Toonami Aftermath EST","startDate":"2022-11-28T17:00:00.000Z","endDate":"2022-11-29T17:00:00.000Z"},{"_id":"635fbd8117f6824d953a216e","scheduleName":"Toonami Aftermath EST","startDate":"2022-11-29T17:00:00.000Z","endDate":"2022-11-30T17:00:00.000Z"},{"_id":"63610efab2ea42e7a913c18a","scheduleName":"Toonami Aftermath EST","startDate":"2022-11-30T17:00:00.000Z","endDate":"2022-12-01T17:00:00.000Z"},{"_id":"6362607ab2ea42e7a91ba353","scheduleName":"Toonami Aftermath EST","startDate":"2022-12-01T17:00:00.000Z","endDate":"2022-12-02T17:00:00.000Z"},{"_id":"6363b1f9b2ea42e7a9231e25","scheduleName":"Toonami Aftermath EST","startDate":"2022-12-02T17:00:00.000Z","endDate":"2022-12-03T11:00:00.000Z"},{"_id":"6365037ab2ea42e7a92b3415","scheduleName":"Toonami Aftermath EST","startDate":"2022-12-03T11:00:00.000Z","endDate":"2022-12-04T12:48:20.000Z"},{"_id":"636654fab2ea42e7a9339918","scheduleName":"Toonami Aftermath EST","startDate":"2022-12-04T11:00:00.000Z","endDate":"2022-12-05T16:27:37.000Z"}]
\ No newline at end of file
+[
+ {
+ "_id": "6a1c277e00f004189f406a87",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-06-29T16:00:00.000Z",
+ "endDate": "2026-06-30T16:00:00.000Z"
+ },
+ {
+ "_id": "6a1d78fe00f004189f8ab232",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-06-30T16:00:00.000Z",
+ "endDate": "2026-07-01T16:00:00.000Z"
+ },
+ {
+ "_id": "6a1eca7e00f004189fd6c0ad",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-01T16:00:00.000Z",
+ "endDate": "2026-07-02T16:00:00.000Z"
+ },
+ {
+ "_id": "6a201bfe00f004189f3781e8",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-02T16:00:00.000Z",
+ "endDate": "2026-07-03T16:00:00.000Z"
+ },
+ {
+ "_id": "6a216d80d02137d17554246e",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-03T16:00:00.000Z",
+ "endDate": "2026-07-04T10:00:00.000Z"
+ },
+ {
+ "_id": "6a22befed02137d17593d644",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-04T10:00:00.000Z",
+ "endDate": "2026-07-05T12:50:02.000Z"
+ },
+ {
+ "_id": "6a24107fd02137d175e04d84",
+ "scheduleName": "Toonami Aftermath EST",
+ "startDate": "2026-07-05T10:00:00.000Z",
+ "endDate": "2026-07-06T17:46:00.000Z"
+ }
+]
\ No newline at end of file
diff --git a/sites/toonamiaftermath.com/readme.md b/sites/toonamiaftermath.com/readme.md
index 4ff99e3cf..b05f48cb4 100644
--- a/sites/toonamiaftermath.com/readme.md
+++ b/sites/toonamiaftermath.com/readme.md
@@ -8,6 +8,12 @@ https://www.toonamiaftermath.com/schedule
npm run grab --- --sites=toonamiaftermath.com
```
+### Update channel list
+
+```sh
+npm run channels:parse --- --config=./sites/toonamiaftermath.com/toonamiaftermath.com.config.js --output=./sites/toonamiaftermath.com/toonamiaftermath.com.channels.xml
+```
+
### Test
```sh
diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.channels.xml b/sites/toonamiaftermath.com/toonamiaftermath.com.channels.xml
index df28c0cb4..688408d37 100644
--- a/sites/toonamiaftermath.com/toonamiaftermath.com.channels.xml
+++ b/sites/toonamiaftermath.com/toonamiaftermath.com.channels.xml
@@ -1,4 +1,7 @@
- Toonami Aftermath EST
+ Snickelodeon East
+ Snickelodeon West
+ Toonami Aftermath East
+ Toonami Aftermath West
diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
index 5dc13323f..09be3de59 100644
--- a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
+++ b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
@@ -1,69 +1,149 @@
-const dayjs = require('dayjs')
-const axios = require('axios')
-const https = require('https')
-const path = require('path')
const fs = require('fs')
+const path = require('path')
+const https = require('https')
+const axios = require('axios')
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+
+dayjs.extend(utc)
const API_ENDPOINT = 'https://api.toonamiaftermath.com'
-const config = {
+// Let's Encrypt YR1 and YR2 will be expired on Sep 2 23:59:59 2028 GMT
+const certfile = path.join(__dirname, '__data__', 'certificate.pem')
+const httpsAgent = new https.Agent({ ca: fs.readFileSync(certfile) })
+const caches = {}
+
+module.exports = {
site: 'toonamiaftermath.com',
days: 3,
request: {
- httpsAgent: new https.Agent({
- ca: fs.readFileSync(path.resolve(__dirname, '__data__/certificate.pem'))
- })
+ cache: {
+ ttl: 24 * 60 * 60 * 1000 // 1 day
+ },
+ httpsAgent
},
async url({ channel, date }) {
- const playlists = await axios
- .get(
- `${API_ENDPOINT}/playlists?scheduleName=${channel.site_id}&startDate=${date
- .add(1, 'd')
- .toJSON()}&thisWeek=true&weekStartDay=monday`,
- config.request
- )
- .then(r => r.data)
- .catch(console.error)
-
- const playlist = playlists.find(p => date.isSame(p.startDate, 'day'))
-
- return `${API_ENDPOINT}/playlist?id=${playlist._id}&addInfo=true`
+ return await getUrl(channel, date)
},
- parser({ content }) {
- let programs = []
+ async parser({ channel, date, content }) {
+ const programs = []
+ const delay = parseInt(channel.site_id.split('+')[1]) || 0
+ const cdate = date.startOf('d')
const items = parseItems(content)
+ // fetch other playlist URLs if exist
+ if (items.length && Array.isArray(date.urls)) {
+ for (const url of date.urls) {
+ if (caches[url] !== undefined) {
+ items.push(...caches[url])
+ } else {
+ const result = await axios.get(url, { httpsAgent })
+ .then(res => res.data)
+ .catch(console.error)
+ const newItems = parseItems(result)
+ caches[url] = newItems
+ items.push(...newItems)
+ }
+ }
+ }
items.forEach(item => {
- programs.push({
- title: item.name,
- sub_title: parseEpisode(item),
- image: parseImage(item),
- start: dayjs(item.startDate),
- stop: dayjs(item.endDate)
- })
+ const start = getDate(item.startDate, delay)
+ const stop = getDate(item.endDate, delay)
+ if (isDate(start, cdate) || isDate(stop, cdate, true)) {
+ programs.push({
+ title: item.name,
+ description: item.info?.fullname,
+ sub_title: item.info?.episode,
+ image: item.info?.image,
+ start,
+ stop
+ })
+ }
})
return programs
+ },
+ async channels() {
+ const channels = []
+ const result = await axios.get('https://www.toonamiaftermath.com/bundle.js')
+ .then(res => res.data)
+ .catch(err => console.error(err.toString()))
+
+ const matches = result.match(/channels:(\[.*?\]),siteConfigs:/)
+ if (matches[1]) {
+ const vm = require('vm')
+ const items = vm.runInNewContext(`const o=${matches[1]}; o`)
+ if (Array.isArray(items)) {
+ channels.push(...items
+ .filter(item => item.scheduleName)
+ .map(item => ({
+ lang: 'en',
+ site_id: `${item.scheduleName}${item.streamDelay ? '+' + item.streamDelay : ''}`,
+ name: item.name
+ }))
+ )
+ }
+ }
+
+ return channels
}
}
+async function getUrl(channel, date) {
+ const scheduleName = channel.site_id.split('+')[0]
+ const url = new URL(`${API_ENDPOINT}/playlists?scheduleName=${
+ scheduleName
+ }&startDate=${
+ date.startOf('d').toJSON()
+ }&thisWeek=true&weekStartDay=monday`)
+ const playlists = await axios.get(url.toString(), { httpsAgent })
+ .then(res => res.data)
+ .catch(err => console.error(err.toString()))
+
+ const urls = []
+ if (Array.isArray(playlists)) {
+ const dt = date.startOf('d')
+ playlists
+ .filter(p => isDate(getDate(p.startDate), dt) || isDate(getDate(p.endDate), dt, true))
+ .forEach(p => {
+ urls.push(`${API_ENDPOINT}/playlist?id=${p._id}&addInfo=true`)
+ })
+ }
+ if (!urls.length) {
+ throw new Error(`Unable to get schedule URL for ${scheduleName}!`)
+ }
+ const playlistUrl = urls.shift()
+ if (urls.length) {
+ // pass next playlist URLs in date object
+ date.urls = urls
+ }
+
+ return playlistUrl
+}
+
+function getDate(dt, delay = 0) {
+ return dayjs.utc(dt).add(delay, 'm')
+}
+
+function isDate(dt, ref, end) {
+ return dt.isSame(ref, 'd') && (end ? dt > ref : true)
+}
+
function parseItems(content) {
if (!content) return []
- const data = JSON.parse(content)
- if (!data || !data.playlist) return []
+ if (typeof content === 'string' || Buffer.isBuffer(content)) {
+ content = JSON.parse(content)
+ }
+ if (!content || !content.playlist) return []
- return data.playlist.blocks.reduce((acc, curr) => {
- acc = acc.concat(curr.mediaList)
+ return content.playlist.blocks.reduce((acc, curr) => {
+ // short media type has no title, use block title instead
+ curr.mediaList.forEach(media => {
+ if (media.name === undefined) {
+ media.name = curr.name
+ }
+ })
- return acc
+ return acc.concat(curr.mediaList)
}, [])
}
-
-function parseEpisode(item) {
- return item && item.info && item.info.episode ? item.info.episode : null
-}
-
-function parseImage(item) {
- return item && item.info && item.info.image ? item.info.image : null
-}
-
-module.exports = config
diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.test.js b/sites/toonamiaftermath.com/toonamiaftermath.com.test.js
index 139a557bc..bf4e04a24 100644
--- a/sites/toonamiaftermath.com/toonamiaftermath.com.test.js
+++ b/sites/toonamiaftermath.com/toonamiaftermath.com.test.js
@@ -5,57 +5,66 @@ const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
+
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
-const API_ENDPOINT = 'https://api.toonamiaftermath.com'
-
-const date = dayjs.utc('2022-11-29', 'YYYY-MM-DD').startOf('d')
+const date = dayjs.utc('2026-07-04').startOf('d')
const channel = {
- site_id: 'Toonami Aftermath EST',
- xmltv_id: 'ToonamiAftermathEast.us'
+ site_id: 'Toonami Aftermath EST+180',
+ xmltv_id: 'ToonamiAftermath.us@West'
}
+axios.get.mockImplementation(url => {
+ const urls = {
+ 'https://api.toonamiaftermath.com/playlists?scheduleName=Toonami%20Aftermath%20EST&startDate=2026-07-04T00:00:00.000Z&thisWeek=true&weekStartDay=monday':
+ 'playlists.json',
+ 'https://api.toonamiaftermath.com/playlist?id=6a216d80d02137d17554246e&addInfo=true': 'content01.json',
+ 'https://api.toonamiaftermath.com/playlist?id=6a22befed02137d17593d644&addInfo=true': 'content02.json'
+ }
+ let data = ''
+ if (urls[url]) {
+ data = JSON.parse(fs.readFileSync(path.join(__dirname, '__data__', urls[url])))
+ }
+
+ return Promise.resolve({ data })
+})
+
it('can generate valid url', async () => {
- axios.get.mockImplementation(url => {
- if (
- url ===
- `${API_ENDPOINT}/playlists?scheduleName=Toonami Aftermath EST&startDate=2022-11-30T00:00:00.000Z&thisWeek=true&weekStartDay=monday`
- ) {
- return Promise.resolve({
- data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/playlists.json')))
- })
- } else {
- return Promise.resolve({ data: '' })
- }
- })
-
- const result = await url({ channel, date })
-
- expect(result).toBe(`${API_ENDPOINT}/playlist?id=635fbd8117f6824d953a216e&addInfo=true`)
+ expect(await url({ channel, date })).toBe('https://api.toonamiaftermath.com/playlist?id=6a216d80d02137d17554246e&addInfo=true')
})
-it('can parse response', () => {
- const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
- let results = parser({ content, channel, date }).map(p => {
- p.start = p.start.toJSON()
- p.stop = p.stop.toJSON()
- return p
- })
+it('can parse response', async () => {
+ const content = fs.readFileSync(path.join(__dirname, '__data__', 'content01.json'))
+ const results = (await parser({ content, channel, date }))
+ .map(p => {
+ p.start = p.start.toJSON()
+ p.stop = p.stop.toJSON()
+ return p
+ })
- expect(results.length).toBe(62)
+ expect(results.length).toBe(73)
expect(results[0]).toMatchObject({
- start: '2022-11-29T17:00:30.231Z',
- stop: '2022-11-29T17:20:54.031Z',
- title: 'X-Men',
- sub_title: 'Reunion (Part 1)',
- image: 'https://i.imgur.com/ZSZ0x1m.gif'
+ start: '2026-07-04T00:01:30.791Z',
+ stop: '2026-07-04T00:22:14.992Z',
+ title: 'Dragonball',
+ description: 'Dragon Ball',
+ sub_title: 'Milk Delivery',
+ image: 'https://i.imgur.com/cQBxAVU.gif'
+ })
+ expect(results[72]).toMatchObject({
+ start: '2026-07-04T23:53:06.041Z',
+ stop: '2026-07-05T00:17:49.153Z',
+ title: 'Patlabor',
+ description: 'Patlabor: The Mobile Police',
+ sub_title: 'You Win!',
+ image: 'https://i.imgur.com/lP8LKsc.gif'
})
})
-it('can handle empty guide', () => {
- const result = parser({ content: '', date })
+it('can handle empty guide', async () => {
+ const result = await parser({ content: '', channel, date })
expect(result).toMatchObject([])
})