Seanime Logo

Seanime

  • Home
  • Getting started
  • v2.8Latest
  • Config file / Data directory
  • Troubleshooting
  • Remote access
  • FAQ
  • Extensions and resources
  • Scan your library
  • Manage anime files
  • Download / Auto-download
  • Watch on other devices
  • Playlists
  • Media streaming
  • Torrent streaming
  • Debrid streaming
  • Online streaming
  • Manga and chapters
  • Reader settings
  • Download chapters
  • Extensions
  • Create extensions
  • Offline mode
  • UI Customization
Home
Getting started
v2.8Latest
Config file / Data directory
Troubleshooting
Remote access
FAQ
Extensions and resources
Anime library
Scan your library
Manage anime files
Download / Auto-download
Watch on other devices
Playlists
Media streaming
Streaming
Torrent streaming
Debrid streaming
Online streaming
Manga
Manga and chapters
Reader settings
Download chapters
Extensions
Extensions
Create extensions
Offline mode
UI Customization

Hooks

How to use hooks

AnilistPlatform

onGetAnime

Can prevent default: No

Event Interface:

interface GetAnimeEvent {
    next();
    anime?: AL_BaseAnime;
}

Event types:

  • AL_BaseAnime

Example:

$app.onGetAnime((e) => {
    // console.log(e.anime);
    
    e.next();
});

onGetAnimeDetails

Can prevent default: No

Event Interface:

interface GetAnimeDetailsEvent {
    next();
    anime?: AL_AnimeDetailsById_Media;
}

Event types:

  • AL_AnimeDetailsById_Media

Example:

$app.onGetAnimeDetails((e) => {
    // console.log(e.anime);
    
    e.next();
});

onGetManga

Can prevent default: No

Event Interface:

interface GetMangaEvent {
    next();
    manga?: AL_BaseManga;
}

Event types:

  • AL_BaseManga

Example:

$app.onGetManga((e) => {
    // console.log(e.manga);
    
    e.next();
});

onGetMangaDetails

Can prevent default: No

Event Interface:

interface GetMangaDetailsEvent {
    next();
    manga?: AL_MangaDetailsById_Media;
}

Event types:

  • AL_MangaDetailsById_Media

Example:

$app.onGetMangaDetails((e) => {
    // console.log(e.manga);
    
    e.next();
});

onGetCachedAnimeCollection

Can prevent default: No

Event Interface:

interface GetCachedAnimeCollectionEvent {
    next();
    animeCollection?: AL_AnimeCollection;
}

Event types:

  • AL_AnimeCollection

Example:

$app.onGetCachedAnimeCollection((e) => {
    // console.log(e.animeCollection);
    
    e.next();
});

onGetCachedMangaCollection

Can prevent default: No

Event Interface:

interface GetCachedMangaCollectionEvent {
    next();
    mangaCollection?: AL_MangaCollection;
}

Event types:

  • AL_MangaCollection

Example:

$app.onGetCachedMangaCollection((e) => {
    // console.log(e.mangaCollection);
    
    e.next();
});

onGetAnimeCollection

Can prevent default: No

Event Interface:

interface GetAnimeCollectionEvent {
    next();
    animeCollection?: AL_AnimeCollection;
}

Event types:

  • AL_AnimeCollection

Example:

$app.onGetAnimeCollection((e) => {
    // console.log(e.animeCollection);
    
    e.next();
});

onGetMangaCollection

Can prevent default: No

Event Interface:

interface GetMangaCollectionEvent {
    next();
    mangaCollection?: AL_MangaCollection;
}

Event types:

  • AL_MangaCollection

Example:

$app.onGetMangaCollection((e) => {
    // console.log(e.mangaCollection);
    
    e.next();
});

onGetCachedRawAnimeCollection

Can prevent default: No

Event Interface:

interface GetCachedRawAnimeCollectionEvent {
    next();
    animeCollection?: AL_AnimeCollection;
}

Event types:

  • AL_AnimeCollection

Example:

$app.onGetCachedRawAnimeCollection((e) => {
    // console.log(e.animeCollection);
    
    e.next();
});

onGetCachedRawMangaCollection

Can prevent default: No

Event Interface:

interface GetCachedRawMangaCollectionEvent {
    next();
    mangaCollection?: AL_MangaCollection;
}

Event types:

  • AL_MangaCollection

Example:

$app.onGetCachedRawMangaCollection((e) => {
    // console.log(e.mangaCollection);
    
    e.next();
});

onGetRawAnimeCollection

Can prevent default: No

Event Interface:

interface GetRawAnimeCollectionEvent {
    next();
    animeCollection?: AL_AnimeCollection;
}

Event types:

  • AL_AnimeCollection

Example:

$app.onGetRawAnimeCollection((e) => {
    // console.log(e.animeCollection);
    
    e.next();
});

onGetRawMangaCollection

Can prevent default: No

Event Interface:

interface GetRawMangaCollectionEvent {
    next();
    mangaCollection?: AL_MangaCollection;
}

Event types:

  • AL_MangaCollection

Example:

$app.onGetRawMangaCollection((e) => {
    // console.log(e.mangaCollection);
    
    e.next();
});

onGetStudioDetails

Can prevent default: No

Event Interface:

interface GetStudioDetailsEvent {
    next();
    studio?: AL_StudioDetails;
}

Event types:

  • AL_StudioDetails

Example:

$app.onGetStudioDetails((e) => {
    // console.log(e.studio);
    
    e.next();
});

onPreUpdateEntry

PreUpdateEntryEvent is triggered when an entry is about to be updated. Prevent default to skip the default update and override the update.

Can prevent default: Yes

Event Interface:

interface PreUpdateEntryEvent {
    next();
    preventDefault();
    mediaId?: number;
    status?: AL_MediaListStatus;
    scoreRaw?: number;
    progress?: number;
    startedAt?: AL_FuzzyDateInput;
    completedAt?: AL_FuzzyDateInput;
}

Event types:

  • AL_MediaListStatus
  • AL_FuzzyDateInput
  • AL_FuzzyDateInput

Example:

$app.onPreUpdateEntry((e) => {
    // console.log(e.mediaId);
    // console.log(e.status);
    // console.log(e.scoreRaw);
    // console.log(e.progress);
    // console.log(e.startedAt);
    // console.log(e.completedAt);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPostUpdateEntry

Can prevent default: No

Event Interface:

interface PostUpdateEntryEvent {
    next();
    mediaId?: number;
}

Example:

$app.onPostUpdateEntry((e) => {
    // console.log(e.mediaId);
    
    e.next();
});

onPreUpdateEntryProgress

PreUpdateEntryProgressEvent is triggered when an entry's progress is about to be updated. Prevent default to skip the default update and override the update.

Can prevent default: Yes

Event Interface:

interface PreUpdateEntryProgressEvent {
    next();
    preventDefault();
    mediaId?: number;
    progress?: number;
    totalCount?: number;
    status?: AL_MediaListStatus;
}

Event types:

  • AL_MediaListStatus

Example:

$app.onPreUpdateEntryProgress((e) => {
    // console.log(e.mediaId);
    // console.log(e.progress);
    // console.log(e.totalCount);
    // console.log(e.status);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPostUpdateEntryProgress

Can prevent default: No

Event Interface:

interface PostUpdateEntryProgressEvent {
    next();
    mediaId?: number;
}

Example:

$app.onPostUpdateEntryProgress((e) => {
    // console.log(e.mediaId);
    
    e.next();
});

onPreUpdateEntryRepeat

PreUpdateEntryRepeatEvent is triggered when an entry's repeat is about to be updated. Prevent default to skip the default update and override the update.

Can prevent default: Yes

Event Interface:

interface PreUpdateEntryRepeatEvent {
    next();
    preventDefault();
    mediaId?: number;
    repeat?: number;
}

Example:

$app.onPreUpdateEntryRepeat((e) => {
    // console.log(e.mediaId);
    // console.log(e.repeat);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPostUpdateEntryRepeat

Can prevent default: No

Event Interface:

interface PostUpdateEntryRepeatEvent {
    next();
    mediaId?: number;
}

Example:

$app.onPostUpdateEntryRepeat((e) => {
    // console.log(e.mediaId);
    
    e.next();
});

Anime

onAnimeEntryRequested

AnimeEntryRequestedEvent is triggered when an anime entry is requested. Prevent default to skip the default behavior and return the modified entry. This event is triggered before [AnimeEntryEvent]. If the modified entry is nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface AnimeEntryRequestedEvent {
    next();
    preventDefault();
    mediaId: number;
    localFiles?: Array<Anime_LocalFile>;
    animeCollection?: AL_AnimeCollection;
    entry?: Anime_Entry;
}

Event types:

  • Anime_LocalFile
  • AL_AnimeCollection
  • Anime_Entry

Example:

$app.onAnimeEntryRequested((e) => {
    // console.log(e.mediaId);
    // console.log(e.localFiles);
    // console.log(e.animeCollection);
    // console.log(e.entry);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAnimeEntry

AnimeEntryEvent is triggered when the media entry is being returned. This event is triggered after [AnimeEntryRequestedEvent].

Can prevent default: No

Event Interface:

interface AnimeEntryEvent {
    next();
    entry?: Anime_Entry;
}

Event types:

  • Anime_Entry

Example:

$app.onAnimeEntry((e) => {
    // console.log(e.entry);
    
    e.next();
});

onAnimeEntryFillerHydration

AnimeEntryFillerHydrationEvent is triggered when the filler data is being added to the media entry. This event is triggered after [AnimeEntryEvent]. Prevent default to skip the filler data.

Can prevent default: Yes

Event Interface:

interface AnimeEntryFillerHydrationEvent {
    next();
    preventDefault();
    entry?: Anime_Entry;
}

Event types:

  • Anime_Entry

Example:

$app.onAnimeEntryFillerHydration((e) => {
    // console.log(e.entry);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAnimeEntryLibraryDataRequested

AnimeEntryLibraryDataRequestedEvent is triggered when the app requests the library data for a media entry. This is triggered before [AnimeEntryLibraryDataEvent].

Can prevent default: No

Event Interface:

interface AnimeEntryLibraryDataRequestedEvent {
    next();
    entryLocalFiles?: Array<Anime_LocalFile>;
    mediaId: number;
    currentProgress: number;
}

Event types:

  • Anime_LocalFile

Example:

$app.onAnimeEntryLibraryDataRequested((e) => {
    // console.log(e.entryLocalFiles);
    // console.log(e.mediaId);
    // console.log(e.currentProgress);
    
    e.next();
});

onAnimeEntryLibraryData

AnimeEntryLibraryDataEvent is triggered when the library data is being added to the media entry. This is triggered after [AnimeEntryLibraryDataRequestedEvent].

Can prevent default: No

Event Interface:

interface AnimeEntryLibraryDataEvent {
    next();
    entryLibraryData?: Anime_EntryLibraryData;
}

Event types:

  • Anime_EntryLibraryData

Example:

$app.onAnimeEntryLibraryData((e) => {
    // console.log(e.entryLibraryData);
    
    e.next();
});

onAnimeEntryManualMatchBeforeSave

AnimeEntryManualMatchBeforeSaveEvent is triggered when the user manually matches local files to a media entry. Prevent default to skip saving the local files.

Can prevent default: Yes

Event Interface:

interface AnimeEntryManualMatchBeforeSaveEvent {
    next();
    preventDefault();
    mediaId: number;
    paths?: Array<string>;
    matchedLocalFiles?: Array<Anime_LocalFile>;
}

Event types:

  • Anime_LocalFile

Example:

$app.onAnimeEntryManualMatchBeforeSave((e) => {
    // console.log(e.mediaId);
    // console.log(e.paths);
    // console.log(e.matchedLocalFiles);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMissingEpisodesRequested

MissingEpisodesRequestedEvent is triggered when the user requests the missing episodes for the entire library. Prevent default to skip the default process and return the modified missing episodes.

Can prevent default: Yes

Event Interface:

interface MissingEpisodesRequestedEvent {
    next();
    preventDefault();
    animeCollection?: AL_AnimeCollection;
    localFiles?: Array<Anime_LocalFile>;
    silencedMediaIds?: Array<number>;
    missingEpisodes?: Anime_MissingEpisodes;
}

Event types:

  • AL_AnimeCollection
  • Anime_LocalFile
  • Anime_MissingEpisodes

Example:

$app.onMissingEpisodesRequested((e) => {
    // console.log(e.animeCollection);
    // console.log(e.localFiles);
    // console.log(e.silencedMediaIds);
    // console.log(e.missingEpisodes);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMissingEpisodes

MissingEpisodesEvent is triggered when the missing episodes are being returned.

Can prevent default: No

Event Interface:

interface MissingEpisodesEvent {
    next();
    missingEpisodes?: Anime_MissingEpisodes;
}

Event types:

  • Anime_MissingEpisodes

Example:

$app.onMissingEpisodes((e) => {
    // console.log(e.missingEpisodes);
    
    e.next();
});

onAnimeLibraryCollectionRequested

AnimeLibraryCollectionRequestedEvent is triggered when the user requests the library collection. Prevent default to skip the default process and return the modified library collection. If the modified library collection is nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface AnimeLibraryCollectionRequestedEvent {
    next();
    preventDefault();
    animeCollection?: AL_AnimeCollection;
    localFiles?: Array<Anime_LocalFile>;
    libraryCollection?: Anime_LibraryCollection;
}

Event types:

  • AL_AnimeCollection
  • Anime_LocalFile
  • Anime_LibraryCollection

Example:

$app.onAnimeLibraryCollectionRequested((e) => {
    // console.log(e.animeCollection);
    // console.log(e.localFiles);
    // console.log(e.libraryCollection);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAnimeLibraryCollection

AnimeLibraryCollectionRequestedEvent is triggered when the user requests the library collection.

Can prevent default: No

Event Interface:

interface AnimeLibraryCollectionEvent {
    next();
    libraryCollection?: Anime_LibraryCollection;
}

Event types:

  • Anime_LibraryCollection

Example:

$app.onAnimeLibraryCollection((e) => {
    // console.log(e.libraryCollection);
    
    e.next();
});

onAnimeLibraryStreamCollectionRequested

AnimeLibraryStreamCollectionRequestedEvent is triggered when the user requests the library stream collection. This is called when the user enables "Include in library" for either debrid/online/torrent streamings.

Can prevent default: No

Event Interface:

interface AnimeLibraryStreamCollectionRequestedEvent {
    next();
    animeCollection?: AL_AnimeCollection;
    libraryCollection?: Anime_LibraryCollection;
}

Event types:

  • AL_AnimeCollection
  • Anime_LibraryCollection

Example:

$app.onAnimeLibraryStreamCollectionRequested((e) => {
    // console.log(e.animeCollection);
    // console.log(e.libraryCollection);
    
    e.next();
});

onAnimeLibraryStreamCollection

AnimeLibraryStreamCollectionEvent is triggered when the library stream collection is being returned.

Can prevent default: No

Event Interface:

interface AnimeLibraryStreamCollectionEvent {
    next();
    streamCollection?: Anime_StreamCollection;
}

Event types:

  • Anime_StreamCollection

Example:

$app.onAnimeLibraryStreamCollection((e) => {
    // console.log(e.streamCollection);
    
    e.next();
});

Autodownloader

onAutoDownloaderRunStarted

AutoDownloaderRunStartedEvent is triggered when the autodownloader starts checking for new episodes. Prevent default to abort the run.

Can prevent default: Yes

Event Interface:

interface AutoDownloaderRunStartedEvent {
    next();
    preventDefault();
    rules?: Array<Anime_AutoDownloaderRule>;
}

Event types:

  • Anime_AutoDownloaderRule

Example:

$app.onAutoDownloaderRunStarted((e) => {
    // console.log(e.rules);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAutoDownloaderTorrentsFetched

AutoDownloaderTorrentsFetchedEvent is triggered at the beginning of a run, when the autodownloader fetches torrents from the provider.

Can prevent default: No

Event Interface:

interface AutoDownloaderTorrentsFetchedEvent {
    next();
    torrents?: Array<AutoDownloader_NormalizedTorrent>;
}

Event types:

  • AutoDownloader_NormalizedTorrent

Example:

$app.onAutoDownloaderTorrentsFetched((e) => {
    // console.log(e.torrents);
    
    e.next();
});

onAutoDownloaderMatchVerified

AutoDownloaderMatchVerifiedEvent is triggered when a torrent is verified to follow a rule. Prevent default to abort the download if the match is found.

Can prevent default: Yes

Event Interface:

interface AutoDownloaderMatchVerifiedEvent {
    next();
    preventDefault();
    torrent?: AutoDownloader_NormalizedTorrent;
    rule?: Anime_AutoDownloaderRule;
    listEntry?: AL_AnimeListEntry;
    localEntry?: Anime_LocalFileWrapperEntry;
    episode: number;
    matchFound: boolean;
}

Event types:

  • AutoDownloader_NormalizedTorrent
  • Anime_AutoDownloaderRule
  • AL_AnimeListEntry
  • Anime_LocalFileWrapperEntry

Example:

$app.onAutoDownloaderMatchVerified((e) => {
    // console.log(e.torrent);
    // console.log(e.rule);
    // console.log(e.listEntry);
    // console.log(e.localEntry);
    // console.log(e.episode);
    // console.log(e.matchFound);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAutoDownloaderSettingsUpdated

AutoDownloaderSettingsUpdatedEvent is triggered when the autodownloader settings are updated

Can prevent default: No

Event Interface:

interface AutoDownloaderSettingsUpdatedEvent {
    next();
    settings?: Models_AutoDownloaderSettings;
}

Event types:

  • Models_AutoDownloaderSettings

Example:

$app.onAutoDownloaderSettingsUpdated((e) => {
    // console.log(e.settings);
    
    e.next();
});

onAutoDownloaderBeforeDownloadTorrent

AutoDownloaderBeforeDownloadTorrentEvent is triggered when the autodownloader is about to download a torrent. Prevent default to abort the download.

Can prevent default: Yes

Event Interface:

interface AutoDownloaderBeforeDownloadTorrentEvent {
    next();
    preventDefault();
    torrent?: AutoDownloader_NormalizedTorrent;
    rule?: Anime_AutoDownloaderRule;
    items?: Array<Models_AutoDownloaderItem>;
}

Event types:

  • AutoDownloader_NormalizedTorrent
  • Anime_AutoDownloaderRule
  • Models_AutoDownloaderItem

Example:

$app.onAutoDownloaderBeforeDownloadTorrent((e) => {
    // console.log(e.torrent);
    // console.log(e.rule);
    // console.log(e.items);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAutoDownloaderAfterDownloadTorrent

AutoDownloaderAfterDownloadTorrentEvent is triggered when the autodownloader has downloaded a torrent.

Can prevent default: No

Event Interface:

interface AutoDownloaderAfterDownloadTorrentEvent {
    next();
    torrent?: AutoDownloader_NormalizedTorrent;
    rule?: Anime_AutoDownloaderRule;
}

Event types:

  • AutoDownloader_NormalizedTorrent
  • Anime_AutoDownloaderRule

Example:

$app.onAutoDownloaderAfterDownloadTorrent((e) => {
    // console.log(e.torrent);
    // console.log(e.rule);
    
    e.next();
});

Continuity

onWatchHistoryItemRequested

WatchHistoryItemRequestedEvent is triggered when a watch history item is requested. Prevent default to skip getting the watch history item from the file cache, in this case the event should have a valid WatchHistoryItem object or set it to nil to indicate that the watch history item was not found.

Can prevent default: Yes

Event Interface:

interface WatchHistoryItemRequestedEvent {
    next();
    preventDefault();
    mediaId: number;
    watchHistoryItem?: Continuity_WatchHistoryItem;
}

Event types:

  • Continuity_WatchHistoryItem

Example:

$app.onWatchHistoryItemRequested((e) => {
    // console.log(e.mediaId);
    // console.log(e.watchHistoryItem);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onWatchHistoryItemUpdated

WatchHistoryItemUpdatedEvent is triggered when a watch history item is updated.

Can prevent default: No

Event Interface:

interface WatchHistoryItemUpdatedEvent {
    next();
    watchHistoryItem?: Continuity_WatchHistoryItem;
}

Event types:

  • Continuity_WatchHistoryItem

Example:

$app.onWatchHistoryItemUpdated((e) => {
    // console.log(e.watchHistoryItem);
    
    e.next();
});

onWatchHistoryLocalFileEpisodeItemRequested

Can prevent default: No

Event Interface:

interface WatchHistoryLocalFileEpisodeItemRequestedEvent {
    next();
    Path: string;
    LocalFiles?: Array<Anime_LocalFile>;
    watchHistoryItem?: Continuity_WatchHistoryItem;
}

Event types:

  • Anime_LocalFile
  • Continuity_WatchHistoryItem

Example:

$app.onWatchHistoryLocalFileEpisodeItemRequested((e) => {
    // console.log(e.Path);
    // console.log(e.LocalFiles);
    // console.log(e.watchHistoryItem);
    
    e.next();
});

onWatchHistoryStreamEpisodeItemRequested

Can prevent default: No

Event Interface:

interface WatchHistoryStreamEpisodeItemRequestedEvent {
    next();
    Episode: number;
    MediaId: number;
    watchHistoryItem?: Continuity_WatchHistoryItem;
}

Event types:

  • Continuity_WatchHistoryItem

Example:

$app.onWatchHistoryStreamEpisodeItemRequested((e) => {
    // console.log(e.Episode);
    // console.log(e.MediaId);
    // console.log(e.watchHistoryItem);
    
    e.next();
});

DebridClient

onDebridAutoSelectTorrentsFetched

DebridAutoSelectTorrentsFetchedEvent is triggered when the torrents are fetched for auto select. The torrents are sorted by seeders from highest to lowest. This event is triggered before the top 3 torrents are analyzed.

Can prevent default: No

Event Interface:

interface DebridAutoSelectTorrentsFetchedEvent {
    next();
    Torrents?: Array<HibikeTorrent_AnimeTorrent>;
}

Event types:

  • HibikeTorrent_AnimeTorrent

Example:

$app.onDebridAutoSelectTorrentsFetched((e) => {
    // console.log(e.Torrents);
    
    e.next();
});

onDebridSkipStreamCheck

DebridSkipStreamCheckEvent is triggered when the debrid client is about to skip the stream check. Prevent default to enable the stream check.

Can prevent default: Yes

Event Interface:

interface DebridSkipStreamCheckEvent {
    next();
    preventDefault();
    streamURL: string;
    retries: number;
 
    /**
     * in seconds
     */
    retryDelay: number;
}

Example:

$app.onDebridSkipStreamCheck((e) => {
    // console.log(e.streamURL);
    // console.log(e.retries);
    // console.log(e.retryDelay);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onDebridSendStreamToMediaPlayer

DebridSendStreamToMediaPlayerEvent is triggered when the debrid client is about to send a stream to the media player. Prevent default to skip the playback.

Can prevent default: Yes

Event Interface:

interface DebridSendStreamToMediaPlayerEvent {
    next();
    preventDefault();
    windowTitle: string;
    streamURL: string;
    media?: AL_BaseAnime;
    aniDbEpisode: string;
    playbackType: string;
}

Event types:

  • AL_BaseAnime

Example:

$app.onDebridSendStreamToMediaPlayer((e) => {
    // console.log(e.windowTitle);
    // console.log(e.streamURL);
    // console.log(e.media);
    // console.log(e.aniDbEpisode);
    // console.log(e.playbackType);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onDebridLocalDownloadRequested

DebridLocalDownloadRequestedEvent is triggered when Seanime is about to download a debrid torrent locally. Prevent default to skip the default download and override the download.

Can prevent default: Yes

Event Interface:

interface DebridLocalDownloadRequestedEvent {
    next();
    preventDefault();
    torrentName: string;
    destination: string;
    downloadUrl: string;
}

Example:

$app.onDebridLocalDownloadRequested((e) => {
    // console.log(e.torrentName);
    // console.log(e.destination);
    // console.log(e.downloadUrl);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

DiscordrpcPresence

onDiscordPresenceAnimeActivityRequested

DiscordPresenceAnimeActivityRequestedEvent is triggered when anime activity is requested, after the [animeActivity] is processed, and right before the activity is sent to queue. There is no guarantee as to when or if the activity will be successfully sent to discord. Note that this event is triggered every 6 seconds or so, avoid heavy processing or perform it only when the activity is changed. Prevent default to stop the activity from being sent to discord.

Can prevent default: Yes

Event Interface:

interface DiscordPresenceAnimeActivityRequestedEvent {
    next();
    preventDefault();
    animeActivity?: DiscordRPC_AnimeActivity;
    details: string;
    state: string;
    startTimestamp?: number;
    endTimestamp?: number;
    largeImage: string;
    largeText: string;
    smallImage: string;
    smallText: string;
    buttons?: Array<DiscordRPC_Button>;
    instance: boolean;
    type: number;
}

Event types:

  • DiscordRPC_AnimeActivity
  • DiscordRPC_Button

Example:

$app.onDiscordPresenceAnimeActivityRequested((e) => {
    // console.log(e.animeActivity);
    // console.log(e.details);
    // console.log(e.state);
    // console.log(e.startTimestamp);
    // console.log(e.endTimestamp);
    // console.log(e.largeImage);
    // console.log(e.largeText);
    // console.log(e.smallImage);
    // console.log(e.smallText);
    // console.log(e.buttons);
    // console.log(e.instance);
    // console.log(e.type);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onDiscordPresenceMangaActivityRequested

DiscordPresenceMangaActivityRequestedEvent is triggered when manga activity is requested, after the [mangaActivity] is processed, and right before the activity is sent to queue. There is no guarantee as to when or if the activity will be successfully sent to discord. Note that this event is triggered every 6 seconds or so, avoid heavy processing or perform it only when the activity is changed. Prevent default to stop the activity from being sent to discord.

Can prevent default: Yes

Event Interface:

interface DiscordPresenceMangaActivityRequestedEvent {
    next();
    preventDefault();
    mangaActivity?: DiscordRPC_MangaActivity;
    details: string;
    state: string;
    startTimestamp?: number;
    endTimestamp?: number;
    largeImage: string;
    largeText: string;
    smallImage: string;
    smallText: string;
    buttons?: Array<DiscordRPC_Button>;
    instance: boolean;
    type: number;
}

Event types:

  • DiscordRPC_MangaActivity
  • DiscordRPC_Button

Example:

$app.onDiscordPresenceMangaActivityRequested((e) => {
    // console.log(e.mangaActivity);
    // console.log(e.details);
    // console.log(e.state);
    // console.log(e.startTimestamp);
    // console.log(e.endTimestamp);
    // console.log(e.largeImage);
    // console.log(e.largeText);
    // console.log(e.smallImage);
    // console.log(e.smallText);
    // console.log(e.buttons);
    // console.log(e.instance);
    // console.log(e.type);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onDiscordPresenceClientClosed

DiscordPresenceClientClosedEvent is triggered when the discord rpc client is closed.

Can prevent default: No

Event Interface:

interface DiscordPresenceClientClosedEvent {
    next();
}

Example:

$app.onDiscordPresenceClientClosed((e) => {
    
    e.next();
});

Manga

onMangaEntryRequested

MangaEntryRequestedEvent is triggered when a manga entry is requested. Prevent default to skip the default behavior and return the modified entry. If the modified entry is nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface MangaEntryRequestedEvent {
    next();
    preventDefault();
    mediaId: number;
    mangaCollection?: AL_MangaCollection;
    entry?: Manga_Entry;
}

Event types:

  • AL_MangaCollection
  • Manga_Entry

Example:

$app.onMangaEntryRequested((e) => {
    // console.log(e.mediaId);
    // console.log(e.mangaCollection);
    // console.log(e.entry);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMangaEntry

MangaEntryEvent is triggered when the manga entry is being returned.

Can prevent default: No

Event Interface:

interface MangaEntryEvent {
    next();
    entry?: Manga_Entry;
}

Event types:

  • Manga_Entry

Example:

$app.onMangaEntry((e) => {
    // console.log(e.entry);
    
    e.next();
});

onMangaLibraryCollectionRequested

MangaLibraryCollectionRequestedEvent is triggered when the manga library collection is being requested.

Can prevent default: No

Event Interface:

interface MangaLibraryCollectionRequestedEvent {
    next();
    mangaCollection?: AL_MangaCollection;
}

Event types:

  • AL_MangaCollection

Example:

$app.onMangaLibraryCollectionRequested((e) => {
    // console.log(e.mangaCollection);
    
    e.next();
});

onMangaLibraryCollection

MangaLibraryCollectionEvent is triggered when the manga library collection is being returned.

Can prevent default: No

Event Interface:

interface MangaLibraryCollectionEvent {
    next();
    libraryCollection?: Manga_Collection;
}

Event types:

  • Manga_Collection

Example:

$app.onMangaLibraryCollection((e) => {
    // console.log(e.libraryCollection);
    
    e.next();
});

onMangaDownloadedChapterContainersRequested

MangaDownloadedChapterContainersRequestedEvent is triggered when the manga downloaded chapter containers are being requested. Prevent default to skip the default behavior and return the modified chapter containers. If the modified chapter containers are nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface MangaDownloadedChapterContainersRequestedEvent {
    next();
    preventDefault();
    mangaCollection?: AL_MangaCollection;
    chapterContainers?: Array<Manga_ChapterContainer>;
}

Event types:

  • AL_MangaCollection
  • Manga_ChapterContainer

Example:

$app.onMangaDownloadedChapterContainersRequested((e) => {
    // console.log(e.mangaCollection);
    // console.log(e.chapterContainers);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMangaDownloadedChapterContainers

MangaDownloadedChapterContainersEvent is triggered when the manga downloaded chapter containers are being returned.

Can prevent default: No

Event Interface:

interface MangaDownloadedChapterContainersEvent {
    next();
    chapterContainers?: Array<Manga_ChapterContainer>;
}

Event types:

  • Manga_ChapterContainer

Example:

$app.onMangaDownloadedChapterContainers((e) => {
    // console.log(e.chapterContainers);
    
    e.next();
});

onMangaLatestChapterNumbersMap

MangaLatestChapterNumbersMapEvent is triggered when the manga latest chapter numbers map is being returned.

Can prevent default: No

Event Interface:

interface MangaLatestChapterNumbersMapEvent {
    next();
    latestChapterNumbersMap?: Record<number, Array<Manga_MangaLatestChapterNumberItem>>;
}

Event types:

  • Manga_MangaLatestChapterNumberItem

Example:

$app.onMangaLatestChapterNumbersMap((e) => {
    // console.log(e.latestChapterNumbersMap);
    
    e.next();
});

onMangaDownloadMap

MangaDownloadMapEvent is triggered when the manga download map has been updated. This map is used to tell the client which chapters have been downloaded.

Can prevent default: No

Event Interface:

interface MangaDownloadMapEvent {
    next();
    mediaMap?: Manga_MediaMap;
}

Event types:

  • Manga_MediaMap

Example:

$app.onMangaDownloadMap((e) => {
    // console.log(e.mediaMap);
    
    e.next();
});

onMangaChapterContainerRequested

MangaChapterContainerRequestedEvent is triggered when the manga chapter container is being requested. This event happens before the chapter container is fetched from the cache or provider. Prevent default to skip the default behavior and return the modified chapter container. If the modified chapter container is nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface MangaChapterContainerRequestedEvent {
    next();
    preventDefault();
    provider: string;
    mediaId: number;
    titles?: Array<string>;
    year: number;
    chapterContainer?: Manga_ChapterContainer;
}

Event types:

  • Manga_ChapterContainer

Example:

$app.onMangaChapterContainerRequested((e) => {
    // console.log(e.provider);
    // console.log(e.mediaId);
    // console.log(e.titles);
    // console.log(e.year);
    // console.log(e.chapterContainer);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMangaChapterContainer

MangaChapterContainerEvent is triggered when the manga chapter container is being returned. This event happens after the chapter container is fetched from the cache or provider.

Can prevent default: No

Event Interface:

interface MangaChapterContainerEvent {
    next();
    chapterContainer?: Manga_ChapterContainer;
}

Event types:

  • Manga_ChapterContainer

Example:

$app.onMangaChapterContainer((e) => {
    // console.log(e.chapterContainer);
    
    e.next();
});

Mediaplayer

onMediaPlayerLocalFileTrackingRequested

MediaPlayerLocalFileTrackingRequestedEvent is triggered when the playback manager wants to track the progress of a local file. Prevent default to stop tracking.

Can prevent default: Yes

Event Interface:

interface MediaPlayerLocalFileTrackingRequestedEvent {
    next();
    preventDefault();
    startRefreshDelay: number;
    refreshDelay: number;
    maxRetries: number;
}

Example:

$app.onMediaPlayerLocalFileTrackingRequested((e) => {
    // console.log(e.startRefreshDelay);
    // console.log(e.refreshDelay);
    // console.log(e.maxRetries);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onMediaPlayerStreamTrackingRequested

MediaPlayerStreamTrackingRequestedEvent is triggered when the playback manager wants to track the progress of a stream. Prevent default to stop tracking.

Can prevent default: Yes

Event Interface:

interface MediaPlayerStreamTrackingRequestedEvent {
    next();
    preventDefault();
    startRefreshDelay: number;
    refreshDelay: number;
    maxRetries: number;
    maxRetriesAfterStart: number;
}

Example:

$app.onMediaPlayerStreamTrackingRequested((e) => {
    // console.log(e.startRefreshDelay);
    // console.log(e.refreshDelay);
    // console.log(e.maxRetries);
    // console.log(e.maxRetriesAfterStart);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

Metadata

onAnimeMetadataRequested

AnimeMetadataRequestedEvent is triggered when anime metadata is requested and right before the metadata is processed. This event is followed by [AnimeMetadataEvent] which is triggered when the metadata is available. Prevent default to skip the default behavior and return the modified metadata. If the modified metadata is nil, an error will be returned.

Can prevent default: Yes

Event Interface:

interface AnimeMetadataRequestedEvent {
    next();
    preventDefault();
    mediaId: number;
    animeMetadata?: Metadata_AnimeMetadata;
}

Event types:

  • Metadata_AnimeMetadata

Example:

$app.onAnimeMetadataRequested((e) => {
    // console.log(e.mediaId);
    // console.log(e.animeMetadata);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAnimeMetadata

AnimeMetadataEvent is triggered when anime metadata is available and is about to be returned. Anime metadata can be requested in many places, ranging from displaying the anime entry to starting a torrent stream. This event is triggered after [AnimeMetadataRequestedEvent]. If the modified metadata is nil, an error will be returned.

Can prevent default: No

Event Interface:

interface AnimeMetadataEvent {
    next();
    mediaId: number;
    animeMetadata?: Metadata_AnimeMetadata;
}

Event types:

  • Metadata_AnimeMetadata

Example:

$app.onAnimeMetadata((e) => {
    // console.log(e.mediaId);
    // console.log(e.animeMetadata);
    
    e.next();
});

onAnimeEpisodeMetadataRequested

AnimeEpisodeMetadataRequestedEvent is triggered when anime episode metadata is requested. Prevent default to skip the default behavior and return the overridden metadata. This event is triggered before [AnimeEpisodeMetadataEvent]. If the modified episode metadata is nil, an empty EpisodeMetadata object will be returned.

Can prevent default: Yes

Event Interface:

interface AnimeEpisodeMetadataRequestedEvent {
    next();
    preventDefault();
    animeEpisodeMetadata?: Metadata_EpisodeMetadata;
    episodeNumber: number;
    mediaId: number;
}

Event types:

  • Metadata_EpisodeMetadata

Example:

$app.onAnimeEpisodeMetadataRequested((e) => {
    // console.log(e.animeEpisodeMetadata);
    // console.log(e.episodeNumber);
    // console.log(e.mediaId);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onAnimeEpisodeMetadata

AnimeEpisodeMetadataEvent is triggered when anime episode metadata is available and is about to be returned. In the current implementation, episode metadata is requested for display purposes. It is used to get a more complete metadata object since the original AnimeMetadata object is not complete. This event is triggered after [AnimeEpisodeMetadataRequestedEvent]. If the modified episode metadata is nil, an empty EpisodeMetadata object will be returned.

Can prevent default: No

Event Interface:

interface AnimeEpisodeMetadataEvent {
    next();
    animeEpisodeMetadata?: Metadata_EpisodeMetadata;
    episodeNumber: number;
    mediaId: number;
}

Event types:

  • Metadata_EpisodeMetadata

Example:

$app.onAnimeEpisodeMetadata((e) => {
    // console.log(e.animeEpisodeMetadata);
    // console.log(e.episodeNumber);
    // console.log(e.mediaId);
    
    e.next();
});

PlaybackManager

onLocalFilePlaybackRequested

LocalFilePlaybackRequestedEvent is triggered when a local file is requested to be played. Prevent default to skip the default playback and override the playback.

Can prevent default: Yes

Event Interface:

interface LocalFilePlaybackRequestedEvent {
    next();
    preventDefault();
    path: string;
}

Example:

$app.onLocalFilePlaybackRequested((e) => {
    // console.log(e.path);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onStreamPlaybackRequested

StreamPlaybackRequestedEvent is triggered when a stream is requested to be played. Prevent default to skip the default playback and override the playback.

Can prevent default: Yes

Event Interface:

interface StreamPlaybackRequestedEvent {
    next();
    preventDefault();
    windowTitle: string;
    payload: string;
    media?: AL_BaseAnime;
    aniDbEpisode: string;
}

Event types:

  • AL_BaseAnime

Example:

$app.onStreamPlaybackRequested((e) => {
    // console.log(e.windowTitle);
    // console.log(e.payload);
    // console.log(e.media);
    // console.log(e.aniDbEpisode);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPlaybackBeforeTracking

PlaybackBeforeTrackingEvent is triggered just before the playback tracking starts. Prevent default to skip playback tracking.

Can prevent default: Yes

Event Interface:

interface PlaybackBeforeTrackingEvent {
    next();
    preventDefault();
    isStream: boolean;
}

Example:

$app.onPlaybackBeforeTracking((e) => {
    // console.log(e.isStream);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPlaybackLocalFileDetailsRequested

PlaybackLocalFileDetailsRequestedEvent is triggered when the local files details for a specific path are requested. This event is triggered right after the media player loads an episode. The playback manager uses the local files details to track the progress, propose next episodes, etc. In the current implementation, the details are fetched by selecting the local file from the database and making requests to retrieve the media and anime list entry. Prevent default to skip the default fetching and override the details.

Can prevent default: Yes

Event Interface:

interface PlaybackLocalFileDetailsRequestedEvent {
    next();
    preventDefault();
    path: string;
    localFiles?: Array<Anime_LocalFile>;
    animeListEntry?: AL_AnimeListEntry;
    localFile?: Anime_LocalFile;
    localFileWrapperEntry?: Anime_LocalFileWrapperEntry;
}

Event types:

  • Anime_LocalFile
  • AL_AnimeListEntry
  • Anime_LocalFile
  • Anime_LocalFileWrapperEntry

Example:

$app.onPlaybackLocalFileDetailsRequested((e) => {
    // console.log(e.path);
    // console.log(e.localFiles);
    // console.log(e.animeListEntry);
    // console.log(e.localFile);
    // console.log(e.localFileWrapperEntry);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onPlaybackStreamDetailsRequested

PlaybackStreamDetailsRequestedEvent is triggered when the stream details are requested. Prevent default to skip the default fetching and override the details. In the current implementation, the details are fetched by selecting the anime from the anime collection. If nothing is found, the stream is still tracked.

Can prevent default: Yes

Event Interface:

interface PlaybackStreamDetailsRequestedEvent {
    next();
    preventDefault();
    animeCollection?: AL_AnimeCollection;
    mediaId: number;
    animeListEntry?: AL_AnimeListEntry;
}

Event types:

  • AL_AnimeCollection
  • AL_AnimeListEntry

Example:

$app.onPlaybackStreamDetailsRequested((e) => {
    // console.log(e.animeCollection);
    // console.log(e.mediaId);
    // console.log(e.animeListEntry);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

Scanner

onScanStarted

ScanStartedEvent is triggered when the scanning process begins. Prevent default to skip the rest of the scanning process and return the local files.

Can prevent default: Yes

Event Interface:

interface ScanStartedEvent {
    next();
    preventDefault();
    libraryPath: string;
    otherLibraryPaths?: Array<string>;
    enhanced: boolean;
    skipLocked: boolean;
    skipIgnored: boolean;
    localFiles?: Array<Anime_LocalFile>;
}

Event types:

  • Anime_LocalFile

Example:

$app.onScanStarted((e) => {
    // console.log(e.libraryPath);
    // console.log(e.otherLibraryPaths);
    // console.log(e.enhanced);
    // console.log(e.skipLocked);
    // console.log(e.skipIgnored);
    // console.log(e.localFiles);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onScanFilePathsRetrieved

ScanFilePathsRetrievedEvent is triggered when the file paths to scan are retrieved. The event includes file paths from all directories to scan. The event includes file paths of local files that will be skipped.

Can prevent default: No

Event Interface:

interface ScanFilePathsRetrievedEvent {
    next();
    filePaths?: Array<string>;
}

Example:

$app.onScanFilePathsRetrieved((e) => {
    // console.log(e.filePaths);
    
    e.next();
});

onScanLocalFilesParsed

ScanLocalFilesParsedEvent is triggered right after the file paths are parsed into local file objects. The event does not include local files that are skipped.

Can prevent default: No

Event Interface:

interface ScanLocalFilesParsedEvent {
    next();
    localFiles?: Array<Anime_LocalFile>;
}

Event types:

  • Anime_LocalFile

Example:

$app.onScanLocalFilesParsed((e) => {
    // console.log(e.localFiles);
    
    e.next();
});

onScanCompleted

ScanCompletedEvent is triggered when the scanning process finishes. The event includes all the local files (skipped and scanned) to be inserted as a new entry. Right after this event, the local files will be inserted as a new entry.

Can prevent default: No

Event Interface:

interface ScanCompletedEvent {
    next();
    localFiles?: Array<Anime_LocalFile>;
 
    /**
     * in milliseconds
     */
    duration: number;
}

Event types:

  • Anime_LocalFile

Example:

$app.onScanCompleted((e) => {
    // console.log(e.localFiles);
    // console.log(e.duration);
    
    e.next();
});

onScanMediaFetcherStarted

ScanMediaFetcherStartedEvent is triggered right before Seanime starts fetching media to be matched against the local files.

Can prevent default: No

Event Interface:

interface ScanMediaFetcherStartedEvent {
    next();
    enhanced: boolean;
}

Example:

$app.onScanMediaFetcherStarted((e) => {
    // console.log(e.enhanced);
    
    e.next();
});

onScanMediaFetcherCompleted

ScanMediaFetcherCompletedEvent is triggered when the media fetcher completes. The event includes all the media fetched from AniList. The event includes the media IDs that are not in the user's collection.

Can prevent default: No

Event Interface:

interface ScanMediaFetcherCompletedEvent {
    next();
    allMedia?: Array<AL_CompleteAnime>;
    unknownMediaIds?: Array<number>;
}

Event types:

  • AL_CompleteAnime

Example:

$app.onScanMediaFetcherCompleted((e) => {
    // console.log(e.allMedia);
    // console.log(e.unknownMediaIds);
    
    e.next();
});

onScanMatchingStarted

ScanMatchingStartedEvent is triggered when the matching process begins. Prevent default to skip the default matching, in which case modified local files will be used.

Can prevent default: Yes

Event Interface:

interface ScanMatchingStartedEvent {
    next();
    preventDefault();
    localFiles?: Array<Anime_LocalFile>;
    normalizedMedia?: Array<Anime_NormalizedMedia>;
    algorithm: string;
    threshold: number;
}

Event types:

  • Anime_LocalFile
  • Anime_NormalizedMedia

Example:

$app.onScanMatchingStarted((e) => {
    // console.log(e.localFiles);
    // console.log(e.normalizedMedia);
    // console.log(e.algorithm);
    // console.log(e.threshold);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onScanLocalFileMatched

ScanLocalFileMatchedEvent is triggered when a local file is matched with media and before the match is analyzed. Prevent default to skip the default analysis and override the match.

Can prevent default: Yes

Event Interface:

interface ScanLocalFileMatchedEvent {
    next();
    preventDefault();
    match?: Anime_NormalizedMedia;
    found: boolean;
    localFile?: Anime_LocalFile;
    score: number;
}

Event types:

  • Anime_NormalizedMedia
  • Anime_LocalFile

Example:

$app.onScanLocalFileMatched((e) => {
    // console.log(e.match);
    // console.log(e.found);
    // console.log(e.localFile);
    // console.log(e.score);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onScanMatchingCompleted

ScanMatchingCompletedEvent is triggered when the matching process completes.

Can prevent default: No

Event Interface:

interface ScanMatchingCompletedEvent {
    next();
    localFiles?: Array<Anime_LocalFile>;
}

Event types:

  • Anime_LocalFile

Example:

$app.onScanMatchingCompleted((e) => {
    // console.log(e.localFiles);
    
    e.next();
});

onScanHydrationStarted

ScanHydrationStartedEvent is triggered when the file hydration process begins. Prevent default to skip the rest of the hydration process, in which case the event's local files will be used.

Can prevent default: Yes

Event Interface:

interface ScanHydrationStartedEvent {
    next();
    preventDefault();
    localFiles?: Array<Anime_LocalFile>;
    allMedia?: Array<Anime_NormalizedMedia>;
}

Event types:

  • Anime_LocalFile
  • Anime_NormalizedMedia

Example:

$app.onScanHydrationStarted((e) => {
    // console.log(e.localFiles);
    // console.log(e.allMedia);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onScanLocalFileHydrationStarted

ScanLocalFileHydrationStartedEvent is triggered when a local file's metadata is about to be hydrated. Prevent default to skip the default hydration and override the hydration.

Can prevent default: Yes

Event Interface:

interface ScanLocalFileHydrationStartedEvent {
    next();
    preventDefault();
    localFile?: Anime_LocalFile;
    media?: Anime_NormalizedMedia;
}

Event types:

  • Anime_LocalFile
  • Anime_NormalizedMedia

Example:

$app.onScanLocalFileHydrationStarted((e) => {
    // console.log(e.localFile);
    // console.log(e.media);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

onScanLocalFileHydrated

ScanLocalFileHydratedEvent is triggered when a local file's metadata is hydrated

Can prevent default: No

Event Interface:

interface ScanLocalFileHydratedEvent {
    next();
    localFile?: Anime_LocalFile;
    mediaId: number;
    episode: number;
}

Event types:

  • Anime_LocalFile

Example:

$app.onScanLocalFileHydrated((e) => {
    // console.log(e.localFile);
    // console.log(e.mediaId);
    // console.log(e.episode);
    
    e.next();
});

Torrentstream

onTorrentStreamAutoSelectTorrentsFetched

TorrentStreamAutoSelectTorrentsFetchedEvent is triggered when the torrents are fetched for auto select. The torrents are sorted by seeders from highest to lowest. This event is triggered before the top 3 torrents are analyzed.

Can prevent default: No

Event Interface:

interface TorrentStreamAutoSelectTorrentsFetchedEvent {
    next();
    Torrents?: Array<HibikeTorrent_AnimeTorrent>;
}

Event types:

  • HibikeTorrent_AnimeTorrent

Example:

$app.onTorrentStreamAutoSelectTorrentsFetched((e) => {
    // console.log(e.Torrents);
    
    e.next();
});

onTorrentStreamSendStreamToMediaPlayer

TorrentStreamSendStreamToMediaPlayerEvent is triggered when the torrent stream is about to send a stream to the media player. Prevent default to skip the default playback and override the playback.

Can prevent default: Yes

Event Interface:

interface TorrentStreamSendStreamToMediaPlayerEvent {
    next();
    preventDefault();
    windowTitle: string;
    streamURL: string;
    media?: AL_BaseAnime;
    aniDbEpisode: string;
    playbackType: string;
}

Event types:

  • AL_BaseAnime

Example:

$app.onTorrentStreamSendStreamToMediaPlayer((e) => {
    // console.log(e.windowTitle);
    // console.log(e.streamURL);
    // console.log(e.media);
    // console.log(e.aniDbEpisode);
    // console.log(e.playbackType);
 
    // Prevent default behavior if needed
    // e.preventDefault();
    
    e.next();
});

Referenced Types

AL_AnimeCollection

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
MediaListCollectionAL_AnimeCollection_MediaListCollection-

AL_AnimeCollectionWithRelations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
MediaListCollectionAL_AnimeCollectionWithRelations_MediaListCollection-

AL_AnimeCollectionWithRelations_MediaListCollection

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
listsArray<AL_AnimeCollectionWithRelations_MediaListCollection_Lists>-

AL_AnimeCollectionWithRelations_MediaListCollection_Lists

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
statusAL_MediaListStatus-
namestring-
isCustomListboolean-
entriesArray<AL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries>-

AL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
scorenumber-
progressnumber-
statusAL_MediaListStatus-
notesstring-
repeatnumber-
privateboolean-
startedAtAL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries_StartedAt-
completedAtAL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries_CompletedAt-
mediaAL_CompleteAnime-

AL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries_CompletedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeCollectionWithRelations_MediaListCollection_Lists_Entries_StartedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeCollection_MediaListCollection

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
listsArray<AL_AnimeCollection_MediaListCollection_Lists>-

AL_AnimeCollection_MediaListCollection_Lists

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
statusAL_MediaListStatus-
namestring-
isCustomListboolean-
entriesArray<AL_AnimeCollection_MediaListCollection_Lists_Entries>-

AL_AnimeCollection_MediaListCollection_Lists_Entries

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
scorenumber-
progressnumber-
statusAL_MediaListStatus-
notesstring-
repeatnumber-
privateboolean-
startedAtAL_AnimeCollection_MediaListCollection_Lists_Entries_StartedAt-
completedAtAL_AnimeCollection_MediaListCollection_Lists_Entries_CompletedAt-
mediaAL_BaseAnime-

AL_AnimeCollection_MediaListCollection_Lists_Entries_CompletedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeCollection_MediaListCollection_Lists_Entries_StartedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeDetailsById_Media

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
siteUrlstring-
idnumber-
durationnumber-
genresArray<string>-
averageScorenumber-
popularitynumber-
meanScorenumber-
descriptionstring-
trailerAL_AnimeDetailsById_Media_Trailer-
startDateAL_AnimeDetailsById_Media_StartDate-
endDateAL_AnimeDetailsById_Media_EndDate-
studiosAL_AnimeDetailsById_Media_Studios-
charactersAL_AnimeDetailsById_Media_Characters-
staffAL_AnimeDetailsById_Media_Staff-
rankingsArray<AL_AnimeDetailsById_Media_Rankings>-
recommendationsAL_AnimeDetailsById_Media_Recommendations-
relationsAL_AnimeDetailsById_Media_Relations-

AL_AnimeDetailsById_Media_Characters

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_AnimeDetailsById_Media_Characters_Edges>-

AL_AnimeDetailsById_Media_Characters_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
roleAL_CharacterRole-
namestring-
nodeAL_BaseCharacter-

AL_AnimeDetailsById_Media_EndDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeDetailsById_Media_Rankings

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
contextstring-
typeAL_MediaRankType-
ranknumber-
yearnumber-
formatAL_MediaFormat-
allTimeboolean-
seasonAL_MediaSeason-

AL_AnimeDetailsById_Media_Recommendations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_AnimeDetailsById_Media_Recommendations_Edges>-

AL_AnimeDetailsById_Media_Recommendations_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
nodeAL_AnimeDetailsById_Media_Recommendations_Edges_Node-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
mediaRecommendationAL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
isAdultboolean-
seasonAL_MediaSeason-
typeAL_MediaType-
formatAL_MediaFormat-
meanScorenumber-
descriptionstring-
episodesnumber-
trailerAL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Trailer-
startDateAL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_StartDate-
coverImageAL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_CoverImage-
bannerImagestring-
titleAL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Title-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_CoverImage

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
extraLargestring-
largestring-
mediumstring-
colorstring-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Title

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
romajistring-
englishstring-
nativestring-
userPreferredstring-

AL_AnimeDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Trailer

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idstring-
sitestring-
thumbnailstring-

AL_AnimeDetailsById_Media_Relations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_AnimeDetailsById_Media_Relations_Edges>-

AL_AnimeDetailsById_Media_Relations_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
relationTypeAL_MediaRelation-
nodeAL_BaseAnime-

AL_AnimeDetailsById_Media_Staff

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_AnimeDetailsById_Media_Staff_Edges>-

AL_AnimeDetailsById_Media_Staff_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
rolestring-
nodeAL_AnimeDetailsById_Media_Staff_Edges_Node-

AL_AnimeDetailsById_Media_Staff_Edges_Node

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
nameAL_AnimeDetailsById_Media_Staff_Edges_Node_Name-
idnumber-

AL_AnimeDetailsById_Media_Staff_Edges_Node_Name

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
fullstring-

AL_AnimeDetailsById_Media_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_AnimeDetailsById_Media_Studios

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
nodesArray<AL_AnimeDetailsById_Media_Studios_Nodes>-

AL_AnimeDetailsById_Media_Studios_Nodes

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
namestring-
idnumber-

AL_AnimeDetailsById_Media_Trailer

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idstring-
sitestring-
thumbnailstring-

AL_AnimeListEntry

Filepath: internal/api/anilist/collection_helper.go

AL_AnimeCollection_MediaListCollection_Lists_Entries

AL_BaseAnime

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
seasonAL_MediaSeason-
typeAL_MediaType-
formatAL_MediaFormat-
seasonYearnumber-
bannerImagestring-
episodesnumber-
synonymsArray<string>-
isAdultboolean-
countryOfOriginstring-
meanScorenumber-
descriptionstring-
genresArray<string>-
durationnumber-
trailerAL_BaseAnime_Trailer-
titleAL_BaseAnime_Title-
coverImageAL_BaseAnime_CoverImage-
startDateAL_BaseAnime_StartDate-
endDateAL_BaseAnime_EndDate-
nextAiringEpisodeAL_BaseAnime_NextAiringEpisode-

AL_BaseAnime_CoverImage

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
extraLargestring-
largestring-
mediumstring-
colorstring-

AL_BaseAnime_EndDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_BaseAnime_NextAiringEpisode

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
airingAtnumber-
timeUntilAiringnumber-
episodenumber-

AL_BaseAnime_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_BaseAnime_Title

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
userPreferredstring-
romajistring-
englishstring-
nativestring-

AL_BaseAnime_Trailer

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idstring-
sitestring-
thumbnailstring-

AL_BaseCharacter

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
isFavouriteboolean-
genderstring-
agestring-
dateOfBirthAL_BaseCharacter_DateOfBirth-
nameAL_BaseCharacter_Name-
imageAL_BaseCharacter_Image-
descriptionstring-
siteUrlstring-

AL_BaseCharacter_DateOfBirth

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_BaseCharacter_Image

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
largestring-

AL_BaseCharacter_Name

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
fullstring-
nativestring-
alternativeArray<string>-

AL_BaseManga

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
seasonAL_MediaSeason-
typeAL_MediaType-
formatAL_MediaFormat-
bannerImagestring-
chaptersnumber-
volumesnumber-
synonymsArray<string>-
isAdultboolean-
countryOfOriginstring-
meanScorenumber-
descriptionstring-
genresArray<string>-
titleAL_BaseManga_Title-
coverImageAL_BaseManga_CoverImage-
startDateAL_BaseManga_StartDate-
endDateAL_BaseManga_EndDate-

AL_BaseManga_CoverImage

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
extraLargestring-
largestring-
mediumstring-
colorstring-

AL_BaseManga_EndDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_BaseManga_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_BaseManga_Title

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
userPreferredstring-
romajistring-
englishstring-
nativestring-

AL_CharacterRole

Filepath: internal/api/anilist/models_gen.go

"MAIN" | "SUPPORTING" | "BACKGROUND"

AL_CompleteAnime

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
seasonAL_MediaSeason-
seasonYearnumber-
typeAL_MediaType-
formatAL_MediaFormat-
bannerImagestring-
episodesnumber-
synonymsArray<string>-
isAdultboolean-
countryOfOriginstring-
meanScorenumber-
descriptionstring-
genresArray<string>-
durationnumber-
trailerAL_CompleteAnime_Trailer-
titleAL_CompleteAnime_Title-
coverImageAL_CompleteAnime_CoverImage-
startDateAL_CompleteAnime_StartDate-
endDateAL_CompleteAnime_EndDate-
nextAiringEpisodeAL_CompleteAnime_NextAiringEpisode-
relationsAL_CompleteAnime_Relations-

AL_CompleteAnime_CoverImage

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
extraLargestring-
largestring-
mediumstring-
colorstring-

AL_CompleteAnime_EndDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_CompleteAnime_NextAiringEpisode

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
airingAtnumber-
timeUntilAiringnumber-
episodenumber-

AL_CompleteAnime_Relations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_CompleteAnime_Relations_Edges>-

AL_CompleteAnime_Relations_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
relationTypeAL_MediaRelation-
nodeAL_BaseAnime-

AL_CompleteAnime_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_CompleteAnime_Title

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
userPreferredstring-
romajistring-
englishstring-
nativestring-

AL_CompleteAnime_Trailer

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idstring-
sitestring-
thumbnailstring-

AL_FuzzyDateInput

Filepath: internal/api/anilist/models_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_ListAnime

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
PageAL_ListAnime_Page-

AL_ListAnime_Page

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
pageInfoAL_ListAnime_Page_PageInfo-
mediaArray<AL_BaseAnime>-

AL_ListAnime_Page_PageInfo

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
hasNextPageboolean-
totalnumber-
perPagenumber-
currentPagenumber-
lastPagenumber-

AL_ListManga

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
PageAL_ListManga_Page-

AL_ListManga_Page

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
pageInfoAL_ListManga_Page_PageInfo-
mediaArray<AL_BaseManga>-

AL_ListManga_Page_PageInfo

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
hasNextPageboolean-
totalnumber-
perPagenumber-
currentPagenumber-
lastPagenumber-

AL_ListRecentAnime

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
PageAL_ListRecentAnime_Page-

AL_ListRecentAnime_Page

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
pageInfoAL_ListRecentAnime_Page_PageInfo-
airingSchedulesArray<AL_ListRecentAnime_Page_AiringSchedules>-

AL_ListRecentAnime_Page_AiringSchedules

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
airingAtnumber-
episodenumber-
timeUntilAiringnumber-
mediaAL_BaseAnime-

AL_ListRecentAnime_Page_PageInfo

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
hasNextPageboolean-
totalnumber-
perPagenumber-
currentPagenumber-
lastPagenumber-

AL_MangaCollection

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
MediaListCollectionAL_MangaCollection_MediaListCollection-

AL_MangaCollection_MediaListCollection

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
listsArray<AL_MangaCollection_MediaListCollection_Lists>-

AL_MangaCollection_MediaListCollection_Lists

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
statusAL_MediaListStatus-
namestring-
isCustomListboolean-
entriesArray<AL_MangaCollection_MediaListCollection_Lists_Entries>-

AL_MangaCollection_MediaListCollection_Lists_Entries

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
scorenumber-
progressnumber-
statusAL_MediaListStatus-
notesstring-
repeatnumber-
privateboolean-
startedAtAL_MangaCollection_MediaListCollection_Lists_Entries_StartedAt-
completedAtAL_MangaCollection_MediaListCollection_Lists_Entries_CompletedAt-
mediaAL_BaseManga-

AL_MangaCollection_MediaListCollection_Lists_Entries_CompletedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_MangaCollection_MediaListCollection_Lists_Entries_StartedAt

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_MangaDetailsById_Media

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
siteUrlstring-
idnumber-
durationnumber-
genresArray<string>-
rankingsArray<AL_MangaDetailsById_Media_Rankings>-
charactersAL_MangaDetailsById_Media_Characters-
recommendationsAL_MangaDetailsById_Media_Recommendations-
relationsAL_MangaDetailsById_Media_Relations-

AL_MangaDetailsById_Media_Characters

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_MangaDetailsById_Media_Characters_Edges>-

AL_MangaDetailsById_Media_Characters_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
roleAL_CharacterRole-
namestring-
nodeAL_BaseCharacter-

AL_MangaDetailsById_Media_Rankings

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
contextstring-
typeAL_MediaRankType-
ranknumber-
yearnumber-
formatAL_MediaFormat-
allTimeboolean-
seasonAL_MediaSeason-

AL_MangaDetailsById_Media_Recommendations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_MangaDetailsById_Media_Recommendations_Edges>-

AL_MangaDetailsById_Media_Recommendations_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
nodeAL_MangaDetailsById_Media_Recommendations_Edges_Node-

AL_MangaDetailsById_Media_Recommendations_Edges_Node

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
mediaRecommendationAL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation-

AL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
seasonAL_MediaSeason-
typeAL_MediaType-
formatAL_MediaFormat-
bannerImagestring-
chaptersnumber-
volumesnumber-
synonymsArray<string>-
isAdultboolean-
countryOfOriginstring-
meanScorenumber-
descriptionstring-
titleAL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Title-
coverImageAL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_CoverImage-
startDateAL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_StartDate-
endDateAL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_EndDate-

AL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_CoverImage

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
extraLargestring-
largestring-
mediumstring-
colorstring-

AL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_EndDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_StartDate

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
yearnumber-
monthnumber-
daynumber-

AL_MangaDetailsById_Media_Recommendations_Edges_Node_MediaRecommendation_Title

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
userPreferredstring-
romajistring-
englishstring-
nativestring-

AL_MangaDetailsById_Media_Relations

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
edgesArray<AL_MangaDetailsById_Media_Relations_Edges>-

AL_MangaDetailsById_Media_Relations_Edges

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
relationTypeAL_MediaRelation-
nodeAL_BaseManga-

AL_MediaFormat

Filepath: internal/api/anilist/models_gen.go

"TV" | "TV_SHORT" | "MOVIE" | "SPECIAL" | "OVA" | "ONA" | "MUSIC" | "MANGA" | "NOVEL" | "ONE_SHOT"

AL_MediaListStatus

Filepath: internal/api/anilist/models_gen.go

"CURRENT" | "PLANNING" | "COMPLETED" | "DROPPED" | "PAUSED" | "REPEATING"

AL_MediaRankType

Filepath: internal/api/anilist/models_gen.go

"RATED" | "POPULAR"

AL_MediaRelation

Filepath: internal/api/anilist/models_gen.go

"ADAPTATION" | "PREQUEL" | "SEQUEL" | "PARENT" | "SIDE_STORY" | "CHARACTER" | "SUMMARY" | "ALTERNATIVE" | "SPIN_OFF" | "OTHER" | "SOURCE" | "COMPILATION" | "CONTAINS"

AL_MediaSeason

Filepath: internal/api/anilist/models_gen.go

"WINTER" | "SPRING" | "SUMMER" | "FALL"

AL_MediaSort

Filepath: internal/api/anilist/models_gen.go

"ID" | "ID_DESC" | "TITLE_ROMAJI" | "TITLE_ROMAJI_DESC" | "TITLE_ENGLISH" | "TITLE_ENGLISH_DESC" | "TITLE_NATIVE" | "TITLE_NATIVE_DESC" | "TYPE" | "TYPE_DESC" | "FORMAT" | "FORMAT_DESC" | "START_DATE" | "START_DATE_DESC" | "END_DATE" | "END_DATE_DESC" | "SCORE" | "SCORE_DESC" | "POPULARITY" | "POPULARITY_DESC" | "TRENDING" | "TRENDING_DESC" | "EPISODES" | "EPISODES_DESC" | "DURATION" | "DURATION_DESC" | "STATUS" | "STATUS_DESC" | "CHAPTERS" | "CHAPTERS_DESC" | "VOLUMES" | "VOLUMES_DESC" | "UPDATED_AT" | "UPDATED_AT_DESC" | "SEARCH_MATCH" | "FAVOURITES" | "FAVOURITES_DESC"

AL_MediaStatus

Filepath: internal/api/anilist/models_gen.go

"FINISHED" | "RELEASING" | "NOT_YET_RELEASED" | "CANCELLED" | "HIATUS"

AL_MediaType

Filepath: internal/api/anilist/models_gen.go

"ANIME" | "MANGA"

AL_StudioDetails

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
StudioAL_StudioDetails_Studio-

AL_StudioDetails_Studio

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
idnumber-
isAnimationStudioboolean-
namestring-
mediaAL_StudioDetails_Studio_Media-

AL_StudioDetails_Studio_Media

Filepath: internal/api/anilist/client_gen.go

Fields:

Fields
PropertyTypeDescription
nodesArray<AL_BaseAnime>-

Anime_AutoDownloaderRule

Filepath: internal/library/anime/autodownloader_rule.go

Fields:

Fields
PropertyTypeDescription
dbIdnumber Will be set when fetched from the database
enabledboolean-
mediaIdnumber-
releaseGroupsArray<string>-
resolutionsArray<string>-
comparisonTitlestring-
titleComparisonTypeAnime_AutoDownloaderRuleTitleComparisonType-
episodeTypeAnime_AutoDownloaderRuleEpisodeType-
episodeNumbersArray<number>-
destinationstring-
additionalTermsArray<string>-

Anime_AutoDownloaderRuleEpisodeType

Filepath: internal/library/anime/autodownloader_rule.go

"recent" | "selected"

Anime_AutoDownloaderRuleTitleComparisonType

Filepath: internal/library/anime/autodownloader_rule.go

"contains" | "likely"

Anime_Entry

Filepath: internal/library/anime/entry.go

Fields:

Fields
PropertyTypeDescription
mediaIdnumber-
mediaAL_BaseAnime-
listDataAnime_EntryListData-
libraryDataAnime_EntryLibraryData-
downloadInfoAnime_EntryDownloadInfo-
episodesArray<Anime_Episode>-
nextEpisodeAnime_Episode-
localFilesArray<Anime_LocalFile>-
anidbIdnumber-
currentEpisodeCountnumber-

Anime_EntryDownloadEpisode

Filepath: internal/library/anime/entry_download_info.go

Fields:

Fields
PropertyTypeDescription
episodeNumbernumber-
aniDBEpisodestring-
episodeAnime_Episode-

Anime_EntryDownloadInfo

Filepath: internal/library/anime/entry_download_info.go

Fields:

Fields
PropertyTypeDescription
episodesToDownloadArray<Anime_EntryDownloadEpisode>-
canBatchboolean-
batchAllboolean-
hasInaccurateScheduleboolean-
rewatchboolean-
absoluteOffsetnumber-

Anime_EntryLibraryData

Filepath: internal/library/anime/entry_library_data.go

Fields:

Fields
PropertyTypeDescription
allFilesLockedboolean-
sharedPathstring-
unwatchedCountnumber-
mainFileCountnumber-

Anime_EntryListData

Filepath: internal/library/anime/entry.go

Fields:

Fields
PropertyTypeDescription
progressnumber-
scorenumber-
statusAL_MediaListStatus-
repeatnumber-
startedAtstring-
completedAtstring-

Anime_Episode

Filepath: internal/library/anime/episode.go

Fields:

Fields
PropertyTypeDescription
typeAnime_LocalFileType-
displayTitlestring e.g, Show: "Episode 1", Movie: "Violet Evergarden The Movie"
episodeTitlestring e.g, "Shibuya Incident - Gate, Open"
episodeNumbernumber-
aniDBEpisodestring AniDB episode number
absoluteEpisodeNumbernumber-
progressNumbernumber Usually the same as EpisodeNumber, unless there is a discrepancy between AniList and AniDB
localFileAnime_LocalFile-
isDownloadedboolean Is in the local files
episodeMetadataAnime_EpisodeMetadata (image, airDate, length, summary, overview)
fileMetadataAnime_LocalFileMetadata (episode, aniDBEpisode, type...)
isInvalidboolean No AniDB data
metadataIssuestring Alerts the user that there is a discrepancy between AniList and AniDB
baseAnimeAL_BaseAnime-

Anime_EpisodeMetadata

Filepath: internal/library/anime/episode.go

Fields:

Fields
PropertyTypeDescription
anidbIdnumber-
imagestring-
airDatestring-
lengthnumber-
summarystring-
overviewstring-
isFillerboolean-

Anime_LibraryCollection

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
continueWatchingListArray<Anime_Episode>-
listsArray<Anime_LibraryCollectionList>-
unmatchedLocalFilesArray<Anime_LocalFile>-
unmatchedGroupsArray<Anime_UnmatchedGroup>-
ignoredLocalFilesArray<Anime_LocalFile>-
unknownGroupsArray<Anime_UnknownGroup>-
statsAnime_LibraryCollectionStats-
streamAnime_StreamCollection Hydrated by the route handler

Anime_LibraryCollectionEntry

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
mediaAL_BaseAnime-
mediaIdnumber-
libraryDataAnime_EntryLibraryData Library data
listDataAnime_EntryListData AniList list data

Anime_LibraryCollectionList

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
typeAL_MediaListStatus-
statusAL_MediaListStatus-
entriesArray<Anime_LibraryCollectionEntry>-

Anime_LibraryCollectionStats

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
totalEntriesnumber-
totalFilesnumber-
totalShowsnumber-
totalMoviesnumber-
totalSpecialsnumber-
totalSizestring-

Anime_LocalFile

Filepath: internal/library/anime/localfile.go

Fields:

Fields
PropertyTypeDescription
pathstring-
namestring-
parsedInfoAnime_LocalFileParsedData-
parsedFolderInfoArray<Anime_LocalFileParsedData>-
metadataAnime_LocalFileMetadata-
lockedboolean-
ignoredboolean Unused for now
mediaIdnumber-

Anime_LocalFileMetadata

Filepath: internal/library/anime/localfile.go

Fields:

Fields
PropertyTypeDescription
episodenumber-
aniDBEpisodestring-
typeAnime_LocalFileType-

Anime_LocalFileParsedData

Filepath: internal/library/anime/localfile.go

Fields:

Fields
PropertyTypeDescription
originalstring-
titlestring-
releaseGroupstring-
seasonstring-
seasonRangeArray<string>-
partstring-
partRangeArray<string>-
episodestring-
episodeRangeArray<string>-
episodeTitlestring-
yearstring-

Anime_LocalFileType

Filepath: internal/library/anime/localfile.go

"main" | "special" | "nc"

Anime_LocalFileWrapperEntry

Filepath: internal/library/anime/localfile_wrapper.go

Fields:

Fields
PropertyTypeDescription
mediaIdnumber-
localFilesArray<Anime_LocalFile>-

Anime_MissingEpisodes

Filepath: internal/library/anime/missing_episodes.go

Fields:

Fields
PropertyTypeDescription
episodesArray<Anime_Episode>-
silencedEpisodesArray<Anime_Episode>-

Anime_NormalizedMedia

Filepath: internal/library/anime/normalized_media.go

Fields:

Fields
PropertyTypeDescription
idnumber-
idMalnumber-
siteUrlstring-
statusAL_MediaStatus-
seasonAL_MediaSeason-
typeAL_MediaType-
formatAL_MediaFormat-
seasonYearnumber-
bannerImagestring-
episodesnumber-
synonymsArray<string>-
isAdultboolean-
countryOfOriginstring-
meanScorenumber-
descriptionstring-
genresArray<string>-
durationnumber-
trailerAL_BaseAnime_Trailer-
titleAL_BaseAnime_Title-
coverImageAL_BaseAnime_CoverImage-
startDateAL_BaseAnime_StartDate-
endDateAL_BaseAnime_EndDate-
nextAiringEpisodeAL_BaseAnime_NextAiringEpisode-

Anime_StreamCollection

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
continueWatchingListArray<Anime_Episode>-
animeArray<AL_BaseAnime>-
listDataRecord<number, Anime_EntryListData>-

Anime_UnknownGroup

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
mediaIdnumber-
localFilesArray<Anime_LocalFile>-

Anime_UnmatchedGroup

Filepath: internal/library/anime/collection.go

Fields:

Fields
PropertyTypeDescription
dirstring-
localFilesArray<Anime_LocalFile>-
suggestionsArray<AL_BaseAnime>-

AutoDownloader_NormalizedTorrent

Filepath: internal/library/autodownloader/autodownloader_torrent.go

Fields:

Fields
PropertyTypeDescription
parsedDataHabari_Metadata-
magnetstring Access using GetMagnet()
providerstring-
namestring-
datestring-
sizenumber-
formattedSizestring-
seedersnumber-
leechersnumber-
downloadCountnumber-
linkstring-
downloadUrlstring-
magnetLinkstring-
infoHashstring-
resolutionstring-
isBatchboolean-
episodeNumbernumber-
releaseGroupstring-
isBestReleaseboolean-
confirmedboolean-

Continuity_Kind

Filepath: internal/continuity/manager.go

"onlinestream" | "mediastream" | "external_player"

Continuity_UpdateWatchHistoryItemOptions

Filepath: internal/continuity/history.go

Fields:

Fields
PropertyTypeDescription
currentTimenumber-
durationnumber-
mediaIdnumber-
episodeNumbernumber-
filepathstring-
kindContinuity_Kind-

Continuity_WatchHistory

Filepath: internal/continuity/history.go

Record<number, Continuity_WatchHistoryItem>

Continuity_WatchHistoryItem

Filepath: internal/continuity/history.go

Fields:

Fields
PropertyTypeDescription
kindContinuity_Kind-
filepathstring-
mediaIdnumber-
episodeNumbernumber-
currentTimenumber-
durationnumber-
timeAddedstring-
timeUpdatedstring-

Continuity_WatchHistoryItemResponse

Filepath: internal/continuity/history.go

Fields:

Fields
PropertyTypeDescription
itemContinuity_WatchHistoryItem-
foundboolean-

DiscordRPC_AnimeActivity

Filepath: internal/discordrpc/presence/presence.go

Fields:

Fields
PropertyTypeDescription
idnumber-
titlestring-
imagestring-
isMovieboolean-
episodeNumbernumber-
pausedboolean-
progressnumber-
durationnumber-
totalEpisodesnumber-
currentEpisodeCountnumber-
episodeTitlestring-

DiscordRPC_Button

Filepath: internal/discordrpc/client/activity.go

Fields:

Fields
PropertyTypeDescription
labelstring-
urlstring-

DiscordRPC_LegacyAnimeActivity

Filepath: internal/discordrpc/presence/presence.go

Fields:

Fields
PropertyTypeDescription
idnumber-
titlestring-
imagestring-
isMovieboolean-
episodeNumbernumber-

DiscordRPC_MangaActivity

Filepath: internal/discordrpc/presence/presence.go

Fields:

Fields
PropertyTypeDescription
idnumber-
titlestring-
imagestring-
chapterstring-

HibikeManga_ChapterDetails

Filepath: internal/extension/hibike/manga/types.go

Fields:

Fields
PropertyTypeDescription
providerstring-
idstring-
urlstring-
titlestring-
chapterstring-
indexnumber-
scanlatorstring-
languagestring-
ratingnumber-
updatedAtstring-

HibikeTorrent_AnimeTorrent

Filepath: internal/extension/hibike/torrent/types.go

Fields:

Fields
PropertyTypeDescription
providerstring-
namestring-
datestring-
sizenumber-
formattedSizestring-
seedersnumber-
leechersnumber-
downloadCountnumber-
linkstring-
downloadUrlstring-
magnetLinkstring-
infoHashstring-
resolutionstring-
isBatchboolean-
episodeNumbernumber-
releaseGroupstring-
isBestReleaseboolean-
confirmedboolean-

Manga_ChapterContainer

Filepath: internal/manga/chapter_container.go

Fields:

Fields
PropertyTypeDescription
mediaIdnumber-
providerstring-
chaptersArray<HibikeManga_ChapterDetails>-

Manga_Collection

Filepath: internal/manga/collection.go

Fields:

Fields
PropertyTypeDescription
listsArray<Manga_CollectionList>-

Manga_CollectionEntry

Filepath: internal/manga/collection.go

Fields:

Fields
PropertyTypeDescription
mediaAL_BaseManga-
mediaIdnumber-
listDataManga_EntryListData AniList list data

Manga_CollectionList

Filepath: internal/manga/collection.go

Fields:

Fields
PropertyTypeDescription
typeAL_MediaListStatus-
statusAL_MediaListStatus-
entriesArray<Manga_CollectionEntry>-

Manga_Entry

Filepath: internal/manga/manga_entry.go

Fields:

Fields
PropertyTypeDescription
mediaIdnumber-
mediaAL_BaseManga-
listDataManga_EntryListData-

Manga_EntryListData

Filepath: internal/manga/manga_entry.go

Fields:

Fields
PropertyTypeDescription
progressnumber-
scorenumber-
statusAL_MediaListStatus-
repeatnumber-
startedAtstring-
completedAtstring-

Manga_MangaLatestChapterNumberItem

Filepath: internal/manga/chapter_container.go

Fields:

Fields
PropertyTypeDescription
providerstring-
scanlatorstring-
languagestring-
numbernumber-

Manga_MediaMap

Filepath: internal/manga/download.go

Record<number, Manga_ProviderDownloadMap>

Manga_ProviderDownloadMap

Filepath: internal/manga/download.go

Record<string, Array<Manga_ProviderDownloadMapChapterInfo>>

Manga_ProviderDownloadMapChapterInfo

Filepath: internal/manga/download.go

Fields:

Fields
PropertyTypeDescription
chapterIdstring-
chapterNumberstring-

Metadata_AnimeMappings

Filepath: internal/api/metadata/types.go

Fields:

Fields
PropertyTypeDescription
animeplanetIdstring-
kitsuIdnumber-
malIdnumber-
typestring-
anilistIdnumber-
anisearchIdnumber-
anidbIdnumber-
notifymoeIdstring-
livechartIdnumber-
thetvdbIdnumber-
imdbIdstring-
themoviedbIdstring-

Metadata_AnimeMetadata

Filepath: internal/api/metadata/types.go

Fields:

Fields
PropertyTypeDescription
titlesRecord<string, string>-
episodesRecord<string, Metadata_EpisodeMetadata>-
episodeCountnumber-
specialCountnumber-
mappingsMetadata_AnimeMappings-

Metadata_EpisodeMetadata

Filepath: internal/api/metadata/types.go

Fields:

Fields
PropertyTypeDescription
anidbIdnumber-
tvdbIdnumber-
titlestring-
imagestring-
airDatestring-
lengthnumber-
summarystring-
overviewstring-
episodeNumbernumber-
episodestring-
seasonNumbernumber-
absoluteEpisodeNumbernumber-
anidbEidnumber-

Models_AutoDownloaderItem

Filepath: internal/database/models/models.go

Fields:

Fields
PropertyTypeDescription
ruleIdnumber-
mediaIdnumber-
episodenumber-
linkstring-
hashstring-
magnetstring-
torrentNamestring-
downloadedboolean-
idnumber-
createdAtstring-
updatedAtstring-

Models_AutoDownloaderSettings

Filepath: internal/database/models/models.go

Fields:

Fields
PropertyTypeDescription
providerstring-
intervalnumber-
enabledboolean-
downloadAutomaticallyboolean-
enableEnhancedQueriesboolean-
enableSeasonCheckboolean-
useDebridboolean-

Onlinestream_Episode

Filepath: internal/onlinestream/repository.go

Fields:

Fields
PropertyTypeDescription
numbernumber-
titlestring-
imagestring-
descriptionstring-
isFillerboolean-

TorrentClient_Torrent

Filepath: internal/torrent_clients/torrent_client/torrent.go

Fields:

Fields
PropertyTypeDescription
namestring-
hashstring-
seedsnumber-
upSpeedstring-
downSpeedstring-
progressnumber-
sizestring-
etastring-
statusTorrentClient_TorrentStatus-
contentPathstring-

TorrentClient_TorrentStatus

Filepath: internal/torrent_clients/torrent_client/torrent.go

"downloading" | "seeding" | "paused" | "other" | "stopped"