From e3d97463e7de2c50ce1423dfcde79b343ce370cf Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 03:59:59 -0400 Subject: [PATCH 01/12] Add metadata.json for kitsu.live integration Signed-off-by: zzxncl --- websites/kitsu.live/metadata.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 websites/kitsu.live/metadata.json diff --git a/websites/kitsu.live/metadata.json b/websites/kitsu.live/metadata.json new file mode 100644 index 000000000000..e319d9702431 --- /dev/null +++ b/websites/kitsu.live/metadata.json @@ -0,0 +1,18 @@ +{ + "apiVersion": 1, + "author": { + "name": "kitsu.live", + "id": "1515251988646989854" + }, + "service": "kitsu.live", + "description": { + "en": "Show your anime watch progress and manga reading progress from kitsu.live on your Discord profile!" + }, + "url": "kitsu.live", + "version": "1.0.0", + "logo": "https://kitsu.live/favicon.png", + "thumbnail": "https://kitsu.live/favicon.png", + "color": "#8b5cf6", + "category": "anime", + "tags": ["anime", "manga", "streaming", "kitsu"] +} From 3eccc78b7803b5e3b55b764775de45c0595f3d6d Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:00:29 -0400 Subject: [PATCH 02/12] Create presence.ts Signed-off-by: zzxncl --- websites/kitsu.live/presence.ts | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 websites/kitsu.live/presence.ts diff --git a/websites/kitsu.live/presence.ts b/websites/kitsu.live/presence.ts new file mode 100644 index 000000000000..b6ed73f8e15a --- /dev/null +++ b/websites/kitsu.live/presence.ts @@ -0,0 +1,37 @@ +const presence = new Presence({ clientId: '1515251988646989854' }); + +presence.on('UpdateData', async () => { + const el = document.getElementById('kitsu-presence-data'); + + if (!el || !el.getAttribute('data-active')) { + presence.setActivity(); // Clear activity + return; + } + + const details = el.getAttribute('data-details') || undefined; + const state = el.getAttribute('data-state') || undefined; + const largeImageKey = el.getAttribute('data-large-image') || undefined; + const largeImageText = el.getAttribute('data-large-image-text') || undefined; + const startTimestampStr = el.getAttribute('data-start-timestamp'); + const endTimestampStr = el.getAttribute('data-end-timestamp'); + + const startTimestamp = startTimestampStr ? parseInt(startTimestampStr) * 1000 : undefined; + const endTimestamp = endTimestampStr ? parseInt(endTimestampStr) * 1000 : undefined; + + presence.setActivity({ + details, + state, + largeImageKey, + largeImageText, + smallImageKey: 'kitsu_logo', + smallImageText: 'kitsu.live', + startTimestamp, + endTimestamp, + buttons: [ + { + label: 'Watch on kitsu.live', + url: window.location.href + } + ] + }); +}); From 17afde0362f590d07f457c4b043ca37607af371f Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:07:46 -0400 Subject: [PATCH 03/12] Delete websites/kitsu.live directory Signed-off-by: zzxncl --- websites/kitsu.live/metadata.json | 18 --------------- websites/kitsu.live/presence.ts | 37 ------------------------------- 2 files changed, 55 deletions(-) delete mode 100644 websites/kitsu.live/metadata.json delete mode 100644 websites/kitsu.live/presence.ts diff --git a/websites/kitsu.live/metadata.json b/websites/kitsu.live/metadata.json deleted file mode 100644 index e319d9702431..000000000000 --- a/websites/kitsu.live/metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "apiVersion": 1, - "author": { - "name": "kitsu.live", - "id": "1515251988646989854" - }, - "service": "kitsu.live", - "description": { - "en": "Show your anime watch progress and manga reading progress from kitsu.live on your Discord profile!" - }, - "url": "kitsu.live", - "version": "1.0.0", - "logo": "https://kitsu.live/favicon.png", - "thumbnail": "https://kitsu.live/favicon.png", - "color": "#8b5cf6", - "category": "anime", - "tags": ["anime", "manga", "streaming", "kitsu"] -} diff --git a/websites/kitsu.live/presence.ts b/websites/kitsu.live/presence.ts deleted file mode 100644 index b6ed73f8e15a..000000000000 --- a/websites/kitsu.live/presence.ts +++ /dev/null @@ -1,37 +0,0 @@ -const presence = new Presence({ clientId: '1515251988646989854' }); - -presence.on('UpdateData', async () => { - const el = document.getElementById('kitsu-presence-data'); - - if (!el || !el.getAttribute('data-active')) { - presence.setActivity(); // Clear activity - return; - } - - const details = el.getAttribute('data-details') || undefined; - const state = el.getAttribute('data-state') || undefined; - const largeImageKey = el.getAttribute('data-large-image') || undefined; - const largeImageText = el.getAttribute('data-large-image-text') || undefined; - const startTimestampStr = el.getAttribute('data-start-timestamp'); - const endTimestampStr = el.getAttribute('data-end-timestamp'); - - const startTimestamp = startTimestampStr ? parseInt(startTimestampStr) * 1000 : undefined; - const endTimestamp = endTimestampStr ? parseInt(endTimestampStr) * 1000 : undefined; - - presence.setActivity({ - details, - state, - largeImageKey, - largeImageText, - smallImageKey: 'kitsu_logo', - smallImageText: 'kitsu.live', - startTimestamp, - endTimestamp, - buttons: [ - { - label: 'Watch on kitsu.live', - url: window.location.href - } - ] - }); -}); From 31fa0d8f43ae55db1e1c600e58551d89cacdc9d7 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:08:38 -0400 Subject: [PATCH 04/12] Create metadata.json Signed-off-by: zzxncl --- websites/K/kitsu.live/metadata.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 websites/K/kitsu.live/metadata.json diff --git a/websites/K/kitsu.live/metadata.json b/websites/K/kitsu.live/metadata.json new file mode 100644 index 000000000000..e319d9702431 --- /dev/null +++ b/websites/K/kitsu.live/metadata.json @@ -0,0 +1,18 @@ +{ + "apiVersion": 1, + "author": { + "name": "kitsu.live", + "id": "1515251988646989854" + }, + "service": "kitsu.live", + "description": { + "en": "Show your anime watch progress and manga reading progress from kitsu.live on your Discord profile!" + }, + "url": "kitsu.live", + "version": "1.0.0", + "logo": "https://kitsu.live/favicon.png", + "thumbnail": "https://kitsu.live/favicon.png", + "color": "#8b5cf6", + "category": "anime", + "tags": ["anime", "manga", "streaming", "kitsu"] +} From a103873f7e790ba31f2a13662d406e6ef3583483 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:09:05 -0400 Subject: [PATCH 05/12] Implement presence functionality for kitsu.live Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 websites/K/kitsu.live/presence.ts diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts new file mode 100644 index 000000000000..5eda057200c1 --- /dev/null +++ b/websites/K/kitsu.live/presence.ts @@ -0,0 +1,37 @@ +const presence = new Presence({ clientId: '1515251988646989854' }) + +presence.on('UpdateData', () => { + const el = document.getElementById('kitsu-presence-data') + + if (!el || !el.getAttribute('data-active')) { + presence.setActivity() + return + } + + const details = el.getAttribute('data-details') || undefined + const state = el.getAttribute('data-state') || undefined + const largeImageKey = el.getAttribute('data-large-image') || undefined + const largeImageText = el.getAttribute('data-large-image-text') || undefined + const startTimestampStr = el.getAttribute('data-start-timestamp') + const endTimestampStr = el.getAttribute('data-end-timestamp') + + const startTimestamp = startTimestampStr ? parseInt(startTimestampStr, 10) * 1000 : undefined + const endTimestamp = endTimestampStr ? parseInt(endTimestampStr, 10) * 1000 : undefined + + presence.setActivity({ + details, + state, + largeImageKey, + largeImageText, + smallImageKey: 'kitsu_logo', + smallImageText: 'kitsu.live', + startTimestamp, + endTimestamp, + buttons: [ + { + label: 'Watch on kitsu.live', + url: document.location.href, + }, + ], + }) +}) From 98afe3c6d1118054fc901c19342910559bac74b3 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:20:59 -0400 Subject: [PATCH 06/12] Update presence.ts Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts index 5eda057200c1..3599b32e2248 100644 --- a/websites/K/kitsu.live/presence.ts +++ b/websites/K/kitsu.live/presence.ts @@ -1,3 +1,5 @@ +import { ActivityType } from 'premid' + const presence = new Presence({ clientId: '1515251988646989854' }) presence.on('UpdateData', () => { @@ -19,6 +21,7 @@ presence.on('UpdateData', () => { const endTimestamp = endTimestampStr ? parseInt(endTimestampStr, 10) * 1000 : undefined presence.setActivity({ + type: ActivityType.Watching, details, state, largeImageKey, From 2bb49116695513c844e70eaacab1c74e0b1ee947 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:28:22 -0400 Subject: [PATCH 07/12] Update presence.ts Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts index 3599b32e2248..9986844684b0 100644 --- a/websites/K/kitsu.live/presence.ts +++ b/websites/K/kitsu.live/presence.ts @@ -1,4 +1,4 @@ -import { ActivityType } from 'premid' +import { ActivityType, Presence } from 'premid' const presence = new Presence({ clientId: '1515251988646989854' }) From f8297898a948467346d1707bb95911e5bb169fdc Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:34:08 -0400 Subject: [PATCH 08/12] Update presence.ts Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts index 9986844684b0..fcd1dbafea1a 100644 --- a/websites/K/kitsu.live/presence.ts +++ b/websites/K/kitsu.live/presence.ts @@ -1,4 +1,4 @@ -import { ActivityType, Presence } from 'premid' +import { ActivityType } from 'premid' const presence = new Presence({ clientId: '1515251988646989854' }) @@ -17,8 +17,8 @@ presence.on('UpdateData', () => { const startTimestampStr = el.getAttribute('data-start-timestamp') const endTimestampStr = el.getAttribute('data-end-timestamp') - const startTimestamp = startTimestampStr ? parseInt(startTimestampStr, 10) * 1000 : undefined - const endTimestamp = endTimestampStr ? parseInt(endTimestampStr, 10) * 1000 : undefined + const startTimestamp = startTimestampStr ? Number.parseInt(startTimestampStr, 10) * 1000 : undefined + const endTimestamp = endTimestampStr ? Number.parseInt(endTimestampStr, 10) * 1000 : undefined presence.setActivity({ type: ActivityType.Watching, From 460db38daafb21a5c09acfb84361e5c584cf2d39 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Thu, 18 Jun 2026 04:38:43 -0400 Subject: [PATCH 09/12] Update presence.ts Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts index fcd1dbafea1a..bc626c99a2f4 100644 --- a/websites/K/kitsu.live/presence.ts +++ b/websites/K/kitsu.live/presence.ts @@ -6,7 +6,7 @@ presence.on('UpdateData', () => { const el = document.getElementById('kitsu-presence-data') if (!el || !el.getAttribute('data-active')) { - presence.setActivity() + presence.clearActivity() return } From 224b4f266da08e0adbc67b4cb614c32321f9623c Mon Sep 17 00:00:00 2001 From: zzxncl Date: Fri, 26 Jun 2026 04:26:30 -0400 Subject: [PATCH 10/12] Update metadata.json for kitsu.live service Signed-off-by: zzxncl --- websites/K/kitsu.live/metadata.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/websites/K/kitsu.live/metadata.json b/websites/K/kitsu.live/metadata.json index e319d9702431..13b81cf93c2c 100644 --- a/websites/K/kitsu.live/metadata.json +++ b/websites/K/kitsu.live/metadata.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.premid.app/metadata/1.17", "apiVersion": 1, "author": { "name": "kitsu.live", @@ -6,13 +7,17 @@ }, "service": "kitsu.live", "description": { - "en": "Show your anime watch progress and manga reading progress from kitsu.live on your Discord profile!" + "en": "kitsu.live is a premium anime streaming and manga reading platform." }, "url": "kitsu.live", "version": "1.0.0", "logo": "https://kitsu.live/favicon.png", - "thumbnail": "https://kitsu.live/favicon.png", + "thumbnail": "https://kitsu.live/assets/hero_banner.png", "color": "#8b5cf6", "category": "anime", - "tags": ["anime", "manga", "streaming", "kitsu"] + "tags": [ + "anime", + "manga", + "streaming" + ] } From 097277c953808da8f3559ce38ee39121beff237a Mon Sep 17 00:00:00 2001 From: zzxncl Date: Fri, 26 Jun 2026 04:27:32 -0400 Subject: [PATCH 11/12] Update smallImageKey to use favicon URL Signed-off-by: zzxncl --- websites/K/kitsu.live/presence.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/K/kitsu.live/presence.ts b/websites/K/kitsu.live/presence.ts index bc626c99a2f4..df04291049ea 100644 --- a/websites/K/kitsu.live/presence.ts +++ b/websites/K/kitsu.live/presence.ts @@ -26,7 +26,7 @@ presence.on('UpdateData', () => { state, largeImageKey, largeImageText, - smallImageKey: 'kitsu_logo', + smallImageKey: 'https://kitsu.live/favicon.png', smallImageText: 'kitsu.live', startTimestamp, endTimestamp, From b0fcdadae4e0839a753fe310f702e44e5cbc74d9 Mon Sep 17 00:00:00 2001 From: zzxncl Date: Fri, 26 Jun 2026 04:37:46 -0400 Subject: [PATCH 12/12] Add regex pattern for kitsu.live URL validation Signed-off-by: zzxncl --- websites/K/kitsu.live/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/websites/K/kitsu.live/metadata.json b/websites/K/kitsu.live/metadata.json index 13b81cf93c2c..54c6af675930 100644 --- a/websites/K/kitsu.live/metadata.json +++ b/websites/K/kitsu.live/metadata.json @@ -10,6 +10,7 @@ "en": "kitsu.live is a premium anime streaming and manga reading platform." }, "url": "kitsu.live", + "regExp": "^https?[:][/][/]([a-z0-9-]+[.])*kitsu[.]live[/]", "version": "1.0.0", "logo": "https://kitsu.live/favicon.png", "thumbnail": "https://kitsu.live/assets/hero_banner.png",