Custom Source
This extension type allows you to add custom media to Seanime.
Note: You cannot test custom sources in the playground. Load them in development mode (like here).
Difficulty: Easy
Type Definitions
/// <reference path="./app.d.ts" />
declare type Settings = {
supportsAnime: boolean
supportsManga: boolean
}
declare type ListResponse<T extends $app.AL_BaseAnime | $app.AL_BaseManga> = {
media: T[]
page: number
totalPages: number
total: number
}
declare abstract class CustomSource {
getSettings(): Settings
async getAnime(ids: number[]): Promise<$app.AL_BaseAnime[]>
async getAnimeMetadata(id: number): Promise<$app.Metadata_AnimeMetadata | null>
async getAnimeWithRelations(id: number): Promise<$app.AL_CompleteAnime>
async getAnimeDetails(id: number): Promise<$app.AL_AnimeDetailsById_Media | null>
async getManga(ids: number[]): Promise<$app.AL_BaseManga[]>
async listAnime(search: string, page: number, perPage: number): Promise<ListResponse<$app.AL_BaseAnime>>
async getMangaDetails(id: number): Promise<$app.AL_MangaDetailsById_Media | null>
async listManga(search: string, page: number, perPage: number): Promise<ListResponse<$app.AL_BaseManga>>
}
Keyword search the various $app types used here:
Code
Do not change the name of the class. It must be Provider.
Media objects
Under the hood, custom source media are treated like AniList media, which is the reason why you need to return objects following AniList's JSON schemas.
For the media ids, you're free to use any number starting from 1. Under the hood, Seanime will automatically convert these IDs to unique numbers to avoid conflicts.
Last updated