# sw1ftin/yummyanime-aniyomi architecture

> Architecture diagram of the GitHub repository sw1ftin/yummyanime-aniyomi, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sw1ftin/yummyanime-aniyomi
- Repository: https://github.com/sw1ftin/yummyanime-aniyomi

## Overview

#### Purpose and module boundary
This is a single Android/Kotlin Aniyomi-compatible extension for browsing YummyAnime content and resolving playable video links. The deployable module is `yummyanime`; it integrates with Aniyomi/Animiru’s extension runtime rather than providing its own application UI.

- `settings.gradle.kts`
- `yummyanime/build.gradle.kts`
- `yummyanime/src/main/AndroidManifest.xml`

#### Primary entry point: source implementation
`YummyAnime` is the central source adapter. It implements the host extension contract and translates host requests—popular, latest, search, detail, episodes, and video resolution—into YummyAnime/Kodik network operations and host-domain models.

- `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`

#### Catalog discovery and search flow
The extension obtains popular titles from `GET /anime`, latest releases from `GET /anime/schedule`, and search/filter results through `GET /anime`. Host-side pagination, filter selections, and query parameters are converted into API requests by the source implementation, then API results are mapped into Aniyomi anime listing objects.

- `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`

#### Title details and episode flow
Opening a title fetches `GET /anime/{url}?need_videos=true`. The resulting title metadata supplies the detail screen, while YummyAnime’s video/episode data is transformed into the episode list expected by the host. This forms the boundary between YummyAnime’s catalog schema and Aniyomi’s title/episode models.

- `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`

#### Video-resolution boundary
Episode playback is a separate resolution stage: YummyAnime supplies episode/video references, and the extension extracts stream URLs through Kodik. The final output is a host-compatible list of video alternatives, rather than a direct player implementation.

- `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`

#### Authentication, preferences, and diagnostics
Requests require a public token in `X-Application`; an optional private token is sent as `Authorization: Yummy <token>`. The extension automatically uses a public token after installation but exposes source preferences for overriding credentials. It also provides an in-app debug log and an upload path to `temp.sh`, avoiding dependency on device logcat.

- `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`

#### Runtime, packaging, and delivery
The project uses Gradle Kotlin DSL to build an Android extension artifact. Runtime dependencies are primarily the Aniyomi extension API, YummyAnime HTTP API, Kodik video service, and optional temp.sh diagnostic upload. GitHub Actions builds and releases the extension.

- `build.gradle.kts`
- `yummyanime/build.gradle.kts`
- `.github/workflows/build.yml`
- `.github/workflows/release.yml`

Main entry points: [`yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt) (YummyAnime source), [`yummyanime/build.gradle.kts`](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/build.gradle.kts) (yummyanime module build), [`build.gradle.kts`](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/build.gradle.kts) (Root Gradle build), [`settings.gradle.kts`](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/settings.gradle.kts) (Gradle settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Extension runtime"]
  node_host{{"Aniyomi / Animiru<br/>host runtime"}}
  node_source["YummyAnime source<br/>Kotlin source adapter<br/>[YummyAnime.kt]"]
  node_catalog[("YummyAnime catalog API<br/>HTTP API")]
  node_title_api[("YummyAnime title API<br/>HTTP API")]
  node_kodik[("Kodik<br/>video service")]
  node_preferences["Source preferences<br/>credential settings<br/>[YummyAnime.kt]"]
  node_auth["Request authentication<br/>HTTP headers<br/>[YummyAnime.kt]"]
  node_models["Host anime models<br/>domain mapping<br/>[YummyAnime.kt]"]
  node_debug_log["In-app debug log<br/>diagnostics<br/>[YummyAnime.kt]"]
  node_temp_sh["temp.sh<br/>diagnostic upload"]
end

subgraph group_delivery["Build &amp; delivery"]
  node_gradle_root["Root Gradle build<br/>Gradle Kotlin DSL<br/>[build.gradle.kts]"]
  node_settings["Gradle settings<br/>module registry"]
  node_module_build["yummyanime module build<br/>Android extension build<br/>[build.gradle.kts]"]
  node_manifest["Android manifest<br/>Android metadata"]
  node_build_ci["Build workflow<br/>GitHub Actions<br/>[build.yml]"]
  node_release_ci["Release workflow<br/>GitHub Actions<br/>[release.yml]"]
end

node_host -->|"host requests"| node_source
node_source -->|"prepares headers"| node_auth
node_preferences -->|"private token override"| node_auth
node_auth -->|"authenticated requests"| node_catalog
node_auth -->|"authenticated request"| node_title_api
node_catalog -->|"catalog results"| node_source
node_title_api -->|"metadata and video refs"| node_source
node_source -->|"resolves episode refs"| node_kodik
node_kodik -->|"stream URLs"| node_source
node_source -->|"maps API data"| node_models
node_models -->|"host-compatible results"| node_host
node_source -->|"writes diagnostics"| node_debug_log
node_debug_log -.->|"uploads on request"| node_temp_sh
node_settings -->|"includes module"| node_module_build
node_gradle_root -->|"configures build"| node_module_build
node_manifest -->|"packages metadata"| node_module_build
node_module_build -->|"compiles"| node_source
node_build_ci -->|"builds"| node_module_build
node_release_ci -->|"releases artifact"| node_module_build

click node_source "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt"
click node_preferences "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt"
click node_auth "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt"
click node_models "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt"
click node_debug_log "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt"
click node_gradle_root "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/build.gradle.kts"
click node_settings "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/settings.gradle.kts"
click node_module_build "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/build.gradle.kts"
click node_manifest "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/AndroidManifest.xml"
click node_build_ci "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/.github/workflows/build.yml"
click node_release_ci "https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/.github/workflows/release.yml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_host,node_source,node_catalog,node_title_api,node_kodik,node_preferences,node_auth,node_models,node_debug_log,node_temp_sh toneBlue
class node_gradle_root,node_settings,node_module_build,node_manifest,node_build_ci,node_release_ci toneAmber
```

## Components

### Extension runtime

Aniyomi-compatible source module and external services.

- **Aniyomi / Animiru**: host runtime · Invokes source APIs and consumes host-domain models.
- [YummyAnime source](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt): Kotlin source adapter · Central adapter for catalog, details, episodes, streams, preferences, and diagnostics. · `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`
- **YummyAnime catalog API**: HTTP API · Provides /anime and /anime/schedule discovery data.
- **YummyAnime title API**: HTTP API · Provides title metadata and video references via /anime/{url}.
- **Kodik**: video service · Resolves episode references into playable stream URLs.
- [Source preferences](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt): credential settings · Stores optional private-token override. · `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`
- [Request authentication](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt): HTTP headers · Adds public X-Application and optional Yummy authorization tokens. · `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`
- [Host anime models](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt): domain mapping · Listing, detail, episode, and video-alternative outputs. · `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`
- [In-app debug log](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt): diagnostics · Captures diagnostics without device logcat. · `yummyanime/src/main/kotlin/eu/kanade/tachiyomi/animeextension/ru/yummyanime/YummyAnime.kt`
- **temp.sh**: diagnostic upload · Receives uploaded debug logs.

### Build & delivery

Android extension packaging and release automation.

- [Root Gradle build](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/build.gradle.kts): Gradle Kotlin DSL · Defines repository-level build configuration. · `build.gradle.kts`
- [Gradle settings](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/settings.gradle.kts): module registry · Includes the deployable extension module. · `settings.gradle.kts`
- [yummyanime module build](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/build.gradle.kts): Android extension build · Builds the extension artifact and declares runtime dependencies. · `yummyanime/build.gradle.kts`
- [Android manifest](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/yummyanime/src/main/AndroidManifest.xml): Android metadata · Declares extension package metadata. · `yummyanime/src/main/AndroidManifest.xml`
- [Build workflow](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/.github/workflows/build.yml): GitHub Actions · Builds the Android extension artifact. · `.github/workflows/build.yml`
- [Release workflow](https://github.com/sw1ftin/yummyanime-aniyomi/blob/main/.github/workflows/release.yml): GitHub Actions · Publishes extension releases. · `.github/workflows/release.yml`

## Connections

- Aniyomi / Animiru → YummyAnime source: host requests · Popular, latest, search, detail, episodes, and video resolution.
- YummyAnime source → Request authentication: prepares headers
- Source preferences → Request authentication: private token override
- Request authentication → YummyAnime catalog API: authenticated requests · GET /anime and /anime/schedule.
- Request authentication → YummyAnime title API: authenticated request · GET /anime/{url}?need_videos=true.
- YummyAnime catalog API → YummyAnime source: catalog results
- YummyAnime title API → YummyAnime source: metadata and video refs
- YummyAnime source → Kodik: resolves episode refs
- Kodik → YummyAnime source: stream URLs
- YummyAnime source → Host anime models: maps API data
- Host anime models → Aniyomi / Animiru: host-compatible results
- YummyAnime source → In-app debug log: writes diagnostics
- In-app debug log → temp.sh: uploads on request
- Gradle settings → yummyanime module build: includes module
- Root Gradle build → yummyanime module build: configures build
- Android manifest → yummyanime module build: packages metadata
- yummyanime module build → YummyAnime source: compiles
- Build workflow → yummyanime module build: builds
- Release workflow → yummyanime module build: releases artifact
