Last active
August 1, 2026 12:11
-
-
Save glennhenry/7dde3d5dc3d821a6b3b64cc17351b71a to your computer and use it in GitHub Desktop.
Utility script to calculate the next occurence of Kep1er's WA DA DA performance on ALL THE K-POP Youtube 24/7 livestream.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Kep1er WA DA DA Occurrence Calculator | |
| ===================================== | |
| The YouTube channel "ALL THE K-POP" hosts a 24/7 livestream of | |
| various K-POP performances (Show Champion, Weekly Idol, etc.). | |
| The broadcast is a fixed playlist of performances that repeats on a regular cycle. | |
| The list of artists is publicly available in the livestream description. | |
| After observing for some time, the playlist duration appears to be | |
| approximately 3 hours and 48 minutes. | |
| This is a small fan script used to calculate the future occurrences of | |
| Kep1er's WA DA DA performance according to an observed reference point. | |
| Since the playlist's duration is estimated, time drift may accumulate over time. | |
| This script will be valid as long as the playlist is not changed. | |
| Why does this exist? | |
| ==================== | |
| It was exciting to see Kep1er suddenly show up on the livestream. | |
| It felt like a surprise in the sea of random performances. | |
| I kep1 tuning in to the stream just to see them again... | |
| Over time, I realized that the livestream is actually a fixed loop. | |
| I came back every time and ended up deriving the playlist's estimated duration. | |
| Once I had the duration, it was easy to know when they would show up again. | |
| I have been doing this for some time by manually calculating the time. | |
| Finally, this script is created to automate it. | |
| */ | |
| // Our observation shows that... | |
| // WA DA DA was played at 10:41, 14:29, and 18:18... | |
| // Monday, 01 June 2026, 10:41 | |
| // Monday, 01 June 2026, 14:29 | |
| // Monday, 01 June 2026, 18:18 | |
| // We tried to observe more closely and obtain these extra accurate timestamp | |
| // Tuesday, 02 June 2026 13:18:39 | |
| // Tuesday, 02 June 2026 17:06:50 | |
| // The playlist runs for approximately 3 hr 48 min 11 sec | |
| approximatePlaylistDuration = 13691810; | |
| // Use the fifth observation as the fixed reference point | |
| // (UTC) Tuesday, 02 June 2026 17:06:50 | |
| referencePoint = 1780420010932; | |
| function main() { | |
| const now = new Date(); | |
| const nowMillis = now.getTime(); | |
| const distance = nowMillis - referencePoint; | |
| const numberOfWadadaSinceReferencePoint = Math.trunc(distance / approximatePlaylistDuration); | |
| const lastWadadaPerformance = referencePoint + numberOfWadadaSinceReferencePoint * approximatePlaylistDuration; | |
| console.log("==============================================================="); | |
| console.log("(Every date is formatted on your local time)"); | |
| console.log(`Today is: ${formatRichDate(now)}`); | |
| console.log(`Last WA DA DA performance was: ${formatRichDate(lastWadadaPerformance)}`); | |
| console.log("==============================================================="); | |
| console.log("Upcoming WA DA DA performances"); | |
| console.log(); | |
| for (let i = 0; i < 5; i++) { | |
| const nextWadadaPerformance = lastWadadaPerformance + approximatePlaylistDuration * (i + 1); | |
| console.log(`At ${formatShortDate(nextWadadaPerformance)} starts in ${toHourAndMinutes(nextWadadaPerformance - nowMillis)}`); | |
| } | |
| console.log("==============================================================="); | |
| } | |
| function toHourAndMinutes(millis) { | |
| const seconds = millis / 1000; | |
| const hours = Math.trunc(seconds / 3600); | |
| const minutes = Math.trunc((seconds % 3600) / 60); | |
| return `${hours} hr ${minutes} min`; | |
| } | |
| function formatRichDate(date) { | |
| date = new Date(date); | |
| const days = [ | |
| "Sunday", | |
| "Monday", | |
| "Tuesday", | |
| "Wednesday", | |
| "Thursday", | |
| "Friday", | |
| "Saturday", | |
| ]; | |
| const dayName = days[date.getDay()]; | |
| const day = String(date.getDate()).padStart(2, "0"); | |
| const months = [ | |
| "January", | |
| "February", | |
| "March", | |
| "April", | |
| "May", | |
| "June", | |
| "July", | |
| "August", | |
| "September", | |
| "October", | |
| "November", | |
| "December", | |
| ]; | |
| const monthName = months[date.getMonth()]; | |
| const year = date.getFullYear(); | |
| const hours = String(date.getHours()).padStart(2, "0"); | |
| const minutes = String(date.getMinutes()).padStart(2, "0"); | |
| return `${dayName}, ${day} ${monthName} ${year}, ${hours}:${minutes}`; | |
| } | |
| function formatShortDate(date) { | |
| date = new Date(date); | |
| const hours = String(date.getHours()).padStart(2, "0"); | |
| const minutes = String(date.getMinutes()).padStart(2, "0"); | |
| return `${hours}:${minutes}`; | |
| } | |
| main(); |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
They ended the livestream and changed the playlist, WA DA DA doesn't appear anymore and there are no other Kep1er performances☹️
The script is useless now 🥀🥀🥀