Skip to content

seizue/Shuka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

243 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

appicon

Shuka

A cross-platform web novel downloader and machine translation (MTL) tool that converts Chinese web novels into English .epub for any e-reader. Available as a PowerShell CLI for Windows and an Android app built with .NET MAUI.

GitHub Downloads GitHub Release GitHub License: MIT

Screenshot

πŸ”½ [ OPEN SCREENSHOT ]
Shuka Screenshot

Supported Sites

Site Example URL
69shuba.com https://www.69shuba.com/book/90417.htm
52shuku.net https://www.52shuku.net/bl/09_b/bkd7d.html
czbooks.net https://czbooks.net/n/clgajm
dmxs.org https://www.dmxs.org/gdjk/22982.html
quanben.io https://www.quanben.io/n/aoshidanshen/list.html
situu.cc https://www.situu.cc/5_5792/
yamibo.com https://www.yamibo.com/novel/267137

czbooks.net and 69shuba.com is protected by Cloudflare. Shuka handles this automatically using a headless browser on Windows and a hidden WebView on Android β€” no extra setup needed.

Building from source

Requires .NET 9 SDK (Windows CLI) and .NET 10 SDK (Android / MAUI).

dotnet build -c Release

Windows installer β€” publish first then compile with Inno Setup:

dotnet publish Shuka.Windows/Shuka.Windows.csproj -c Release -r win-x64 --self-contained true -o Shuka.Windows/bin/publish
Shuka.Windows/bin/publish/Shuka.exe playwright install chromium
ISCC.exe Shuka.Windows/installer.iss

Android APK:

dotnet publish Shuka.Android/Shuka.Android.csproj -f net10.0-android -c Release

Adding a new site

Implement ISiteAdapter in Shuka.Core/Adapters/ and register it in BookService.Adapters:

// Shuka.Core/Adapters/MySiteAdapter.cs
public class MySiteAdapter : ISiteAdapter
{
    public string SiteName => "mysite.com";

    // Return true if the URL belongs to this site
    public bool Matches(string url) => url.Contains("mysite.com");

    // Normalize an arbitrary page URL to the novel's index/chapter-list URL
    public string NormalizeUrl(string url) => /* strip chapter suffix, etc. */;

    // Parse the index page HTML β€” return title, author, cover URL, and ordered chapter list
    public IndexInfo ParseIndex(string html, string indexUrl)
    {
        // IndexInfo(title, author, List<ChapterRef>, coverUrl)
        // ChapterRef(url, displayTitle)
        var chapters = new List<ChapterRef> { new("https://mysite.com/ch1", "Chapter 1") };
        return new IndexInfo("Title", "Author", chapters, coverUrl: null);
    }

    // Extract paragraph text from a chapter page
    public List<string> ExtractChapterText(string html) => /* return one string per paragraph */;

    // Set to true only if the site is behind Cloudflare (uses headless browser / WebView)
    public bool RequiresCfBypass => false;
}

Then register it in the Adapters array:

// Shuka.Core/BookService.cs
public static readonly ISiteAdapter[] Adapters =
    [new ShukuAdapter(), new CzBooksAdapter(), new DmxsAdapter(), new ShubaAdapter(),
     new QuanbenAdapter(), new SituuAdapter(), new YamiboAdapter(),
     new MySiteAdapter()]; // ← add here

That's all β€” BookService will automatically detect and route downloads to your adapter.

License

See LICENSE.

About

A cross-platform web novel downloader and machine translation (MTL) tool that converts Chinese web novels into English EPUBs for any e-reader.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages