iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
Anime 시청, Manga·소설 읽기를 각각 별도 앱으로 제공하는 동일 UI입니다
Anime Watcher, Manga Reader, and Novel Reader as three separate apps, same UI
미디어Kotlin · ShellGitHub @jakepurple13직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗
Discord Link There's a discord now!!! This is something that will probably be changed and modified since it's the first time I've done this.
For the nightly release, go here
A combined version of my MangaWorld and AnimeWorld apps. This was created because there were a ton of shared elements between the two apps so I combined them, allowing two separate apps but a lot of the same base logic.
These apps do not contain ANY sources themselves. In order to pull sources, the apps do contain some default sources.
Right now, we do support cloud syncing via Firebase, however, that will be going away soon. We are making an alternative way that requires some manual configuration. Using OtakuWorld will allow you to setup a manual configuration! A server is required, fortunately, we have made a basic server that will only work on a local network. Help wanted to help set up a more solid solution!
For MangaWorld: installed Mihon extensions are loaded natively. Add a Mihon repo URL in Extensions so
its signing key marks that repo's extensions as trusted. In-app browsing and installing supports
both repos that publish the legacy index.min.json and repos that publish Mihon's newer index_v2
format.
For AnimeWorld: Any sources that work with Aniyomi will work with AnimeWorld...After the bridge is installed.
If using adb:
adb install animeworldtv-release.apk
If not using adb:
Be sure to change the build variant to a noFirebase variant. Other than that, nothing needs to change to run/build locally!
A JVM/Desktop Compose build of MangaWorld, sharing UI with the Android app via :mangaworld:shared.
./gradlew :mangaworld:desktop:run
Works: browsing, search, favorites, manga lists/details, reading chapters in the built-in reader, downloads (with configurable download directory in Platform Settings), and custom lists.
A JVM/Desktop Compose build of AnimeWorld, sharing UI with the Android app via :animeworld:shared.
./gradlew :animeworld:desktop:run
Works: browsing, search, favorites, episode lists/details, basic downloads (saves the episode stream to disk, configurable download folder in Platform Settings).
Not yet supported: in-app video playback (clicking an episode shows a placeholder screen) and Chromecast/casting — both are Android-only for now.
A JVM/Desktop Compose build of NovelWorld, sharing UI with the Android app via :novelworld:shared.
./gradlew :novelworld:desktop:run
Works: browsing, search, favorites, reading chapters in the built-in reader.
Not yet supported: downloads (NovelWorld has no download support on any platform yet).
If you run into any issues, please create an issue request with the following details:
If you want to add a new source or have a change that might make the app better
Disclaimer: I am not affiliated with Tachiyomi app or any fork hosted on GitHub.
The :kmpuiviews:koogintegration:customscraper module provides an on-demand HTML scraping pipeline that extracts manga image URLs and anime video stream URLs from any public webpage using an on-device LLM agent.
WebScraper.scrape(url)
└─ Ktor HTTP GET → raw HTML
└─ HtmlSanitizer → stripped HTML (≤ 8,000 chars)
└─ LlmMediaExtractor (Koog AIAgent)
└─ CustomScrapeKmpChapterModel(urls=[...])
| Use Case | What it extracts |
|---|---|
| Manga chapter page | All <img> src, data-src, data-lazy-src URLs (page images) |
| Anime episode page | All <video>, <source> URLs and .mp4 / .m3u8 JS variables |
scrape() call is a fresh fetch.@Serializable
data class CustomScrapeKmpChapterModel(
val urls: List<String>, // extracted media URLs; empty on failure
)
// Obtain executor + model from your AgentMaker (or any Koog LLM setup):
val executor = MultiLLMPromptExecutor(agentInfo.llmClient)
val model = agentInfo.model
val scraper = WebScraper(executor = executor, model = model)
val result = scraper.scrape("https://example.com/manga/chapter-1")
result.urls.forEach { println(it) }
| Technology | Role |
|---|---|
| Kotlin Multiplatform | Android + JVM Desktop targets |
| Ktor | HTTP client (OkHttp engine on both platforms) |
| Koog | LLM agent framework for structured JSON extraction |
| kotlinx.serialization | JSON deserialization of CustomScrapeKmpChapterModel |