Skip to content

Repository files navigation

MHExtensions

Tachiyomi/Mihon extension repository for personal use, based on the Keiyoushi build infrastructure.

Extensions

Extension Language Site Status
Comix All comix.to Working (with modern Cloudflare bypass)
ManhuaRMTL English manhuarmtl.com Working (with OCR text overlay)
Kagane English kagane.to Working (integrity-token flow + CF bypass)
Atsumaru English atsu.moe Working (custom JSON API)
MKissa English mkissa.to Browse/search/details only (see below)

MKissa note: MKissa gates chapter images behind a rotating anti-bot token generated by their own JavaScript (explicitly hardened against Tachiyomi-style scraping). Browsing, search, details and the chapter list work; opening a chapter asks you to read on the site for now.

Repository URL for Mihon

To use this repo in Mihon, add:

https://raw.githubusercontent.com/marbou92/MHRepo/main/repo.json

Features

Comix (src/all/comixto/)

  • Reverse-engineered API with request signing and response decryption
  • Modern Cloudflare bypass — browser-grade fingerprint headers (sec-fetch-*, sec-ch-ua* client hints derived from the WebView user agent), WebView cookie sync (cf_clearance), and smart retry with Retry-After support on CF block responses
  • Image descrambling for tile-scrambled pages
  • 10 extension settings (content rating, deduplication, score display, etc.)
  • Comix-style description format with stars and bold info line

ManhuaRMTL (src/en/manhuarmtl/)

  • Madara-based theme with custom MRM selectors
  • OCR text overlay — burns English MTL text onto raw images (the site serves raw images; English is a JS overlay fetched from fetch-ocr.php)
  • Toggle between English (MTL overlay) and Raw images in settings
  • NSFW content filter (hide/show adult content)
  • Comix-style description format with stars and bold info line
  • Custom filters: genres (include/exclude), status, sort, author, artist, release year

Kagane (src/en/kagane/)

  • Komga-fork JSON API (/api/v2) with the short-lived integrity token flow for chapter manifests
  • Same modern Cloudflare bypass as Comix (the whole domain is behind a managed challenge)
  • Transparent page-token refresh when the CDN answers 401/403/507
  • Data saver support
  • Comix-style settings (content rating, blocked genres, deduplication, alt names, extra info, tags) and description format

Atsumaru (src/en/atsumaru/)

  • Custom JSON API: home2 browse endpoints + Typesense search + /api/manga/page details
  • Genre/status/type/content-rating filters, sort options
  • Comix-style settings (content rating, default types, blocked genres, deduplication, alt names, extra info, tags, score position) and description format

MKissa (src/en/mkissa/)

  • GraphQL persisted queries (api.mkissa.net) for popular/trending/search/details
  • Comix-style settings (content rating, blocked genres, alt names, extra info, tags, score position) and description format
  • Chapter images are intentionally not fetchable (anti-bot token, see note above)

Build & Publish

Prerequisites

  1. GitHub Secrets (in this repo's Settings → Secrets and variables → Actions):

    • SIGNING_KEY — base64-encoded .jks keystore file
    • KEY_STORE_PASSWORD — keystore password
    • ALIAS — key alias name
    • KEY_PASSWORD — key password
    • REPO_PAT — GitHub PAT with write access to marbou92/MHRepo
    • SIGNING_FINGERPRINT_MANUAL — SHA-256 fingerprint of your signing key (for cleanup mode)
  2. To get the signing fingerprint:

    keytool -list -v \
      -keystore signingkey.jks \
      -storepass "YOUR_KEYSTORE_PASSWORD" \
      -alias "YOUR_ALIAS" \
      -keypass "YOUR_KEY_PASSWORD" \
      | grep "SHA256:"

Publishing extensions

  1. Make your changes to the extension source code
  2. Bump versionCode in the extension's build.gradle.kts
  3. Commit and push to main
  4. Go to Actions → Release & Publish → Run workflow
  5. Select publish mode and run

The workflow will:

  • Build signed release APKs for all extensions in settings.gradle.kts
  • Compute the signing key fingerprint
  • Publish APKs, JARs, icons, and protobuf index (index.pb) to MHRepo
  • Purge the jsDelivr CDN cache

Cleaning up orphaned extensions

If you rename or move an extension (e.g., from src/all/ to src/en/), the old entry stays in MHRepo's index. To clean up:

  1. Go to Actions → Release & Publish → Run workflow
  2. Select cleanup-dry-run mode first to preview what will be deleted
  3. If correct, run again with cleanup mode to actually delete

Project structure

MHExtensions/
├── .github/
│   ├── scripts/
│   │   ├── publish-repo.py      # Publish & cleanup script (protobuf-based)
│   │   ├── index.proto          # Protobuf schema for Mihon v2 index
│   │   └── index.min.json       # Static legacy marker file
│   └── workflows/
│       └── release_publish.yml  # Build + publish + cleanup workflow
├── core/                        # Shared library code
├── compiler/                    # KSP annotation processor
├── lib/                         # Shared libraries (cryptoaes, i18n)
├── lib-multisrc/                # Multisrc themes (madara, etc.)
├── src/
│   ├── all/comixto/             # Comix extension
│   ├── en/manhuarmtl/           # ManhuaRMTL extension
│   ├── en/kagane/               # Kagane extension
│   ├── en/atsumaru/             # Atsumaru extension
│   └── en/mkissa/               # MKissa extension
├── settings.gradle.kts          # Extension loading config
└── gradlew                      # Gradle wrapper

Adding a new extension

  1. Create src/<lang>/<name>/ with the extension source
  2. Add loadIndividualExtension("<lang>", "<name>") to settings.gradle.kts
  3. Add the icon at src/<lang>/<name>/res/mipmap-xhdpi/ic_launcher.png
  4. Commit, push, and run the publish workflow

Credits

License

See LICENSE.

About

Mihon/Tachiyomi MarBou extension source code

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages