comics-downloader: a Go scraper that turns a series listing into pdf or epub
tool to download comics and manga in pdf/epub/cbr/cbz from a website
At a glance
- What is it?
- Girbons/comics-downloader is a Go command line tool that reads a comic or manga series page from a fixed list of supported sites and writes the issues out as pdf, epub, cbr or cbz. It suits a reader who already follows one of those sites, and it is a poor fit for anyone who needs titles that the site list does not cover.
- Who is it for?
- Adopt comics-downloader if you read one of the listed sites, want the whole series on disk in a format a reader app can open, and are comfortable building from Go source or grabbing a prebuilt binary. Do not adopt it if you need support for a site outside the hardcoded list, if you want a reader with library management, or if you need to fetch titles that the sites host without permission.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 111 days ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One binary, a fixed list of sites, four output formats
The tool has a narrow contract: give it a series URL from a site it knows, and it writes the issues to disk in a comic format. The repository description says it plainly, a tool to download comics and manga in pdf, epub, cbr or cbz from a website.
The language is Go, the licence is MIT, and the module path is `github.com/Girbons/comics-downloader` with `go 1.25.0` declared in `go.mod`. The code sits in `cmd/`, `internal/` and `pkg/`, with a `docs/` directory, a `CHANGELOG.md` and a `Makefile` for cross compilation.
The dependency list explains what the output stages are made of. HTML work goes through `github.com/anaskhan96/soup` for parsing pages, epub writing comes from `github.com/bmaupin/go-epub`, pdf writing from `github.com/jung-kurt/gofpdf`, and archive handling from `github.com/mholt/archives`. `github.com/schollz/progressbar/v2` draws the progress bar, `github.com/sirupsen/logrus` handles logging, and `fyne.io/fyne` powers the optional desktop GUI.
That is a sensible split for a scraper. Page parsing, document assembly and archive writing are separate concerns, and the archive library is what makes cbr and cbz possible without shelling out to a comic tool.
The flag set: -all, -range, -last and a polling daemon
The CLI is built around one required input, `-url`, which takes a comic URL or a comma separated list of URLs with no spaces. Everything else narrows or extends what gets fetched.
The three selection flags are mutually different in what they accept. `-all` downloads every issue of the comic, and the URL you pass can be any issue of that comic or the main series page. `-range` takes a start and end such as `3-9` and again accepts either an issue URL or the series page. `-last` grabs the most recent issue only. The `-output` flag sets the destination folder, and the folder is created if it does not exist.
Here is the shape of a normal invocation, taken from the documented examples:
./comics-downloader -url=[your url] -all./comics-downloader -url=[your url] -range=[start-end]The polling mode is what makes it usable as a subscription rather than a one-off grab. The `-daemon` flag runs the downloader as a daemon, and the documentation is clear that it works only together with `-all` or `-last`. `-daemon-timeout` controls how often the downloader runs and defaults to 600 seconds, so a default daemon checks ten times an hour:
./comics-downloader -url=[your url] -daemon -daemon-timeout=300The other flags in the help output cover naming and layout rather than fetching: `-custom-comic-name` sets an output name, `-issue-number-only` forces saving by issue number instead of chapter name plus issue number, `-country` sets the country used by MangaDex with ISO 3166-1 codes, and `-force-aspect` forces images to A4 portrait. `-debug` turns on debug logging and `-version` prints the release version.
Output paths, formats and the images-only mode
By default the tool builds a folder structure of `/comics/[source]/[name]/`, and the `-create-default-path` flag is what controls it. The help text is unusually revealing here: the flag is described as making the comics and issue download happen without prepending the default folder structure, and its default value is true. Passing `-create-default-path=false` therefore flattens the output, which is what you want if a reader app scans a single directory:
./comics-downloader -url=[your url] -create-default-path=falseFour output formats are supported, and the default is pdf. The other three are epub, cbr and cbz, and the format is chosen with `-format`:
./comics-downloader -url=[your url] -format=epubThere is a second output mode that skips document assembly entirely. `-images-only` downloads the comic or manga images rather than packaging them, and `-images-format` picks the image format, where the available values are img, png and jpg and the default is jpg:
./comics-downloader -url=[your url] -images-only -images-format=jpgThat distinction matters more than it looks. A pdf or epub is a finished document with a page order, while images-only gives you raw files that still need sorting, and the tool offers no separate index file for them in the documented flags.
Support is a hardcoded list, and MangaDex is the outlier
The set of supported sites is fixed in the source: comicextra.net, readallcomics.com, readcomiconline.li, mangareader.tv, mangatown.com, mangadex.org, mangakakalot.com and manganato.com. There is no plugin mechanism and no option to add a site, so a series hosted anywhere else simply is not reachable by this tool.
The options table shows how the sites differ, and the differences are not cosmetic. Every site supports `all`. Every site supports `last` except MangaDex. The `country` option works on MangaDex and nowhere else, because MangaDex uses ISO 3166-1 country codes to decide which edition of a series to return. That is the practical trap: for a reader who wants the latest chapter of a MangaDex title, the tool has no path for it, and the workaround is `-all`, which pulls the whole series.
Several entries in the supported list carry a warning marker in the documentation, and the docs do not explain what the marker means. The tool also does not document any handling for rate limits, login walls, or a site's terms of use, so a reader running a daemon against a site with a warning marker is doing so without guidance from the project on whether that is welcome.
Cross compilation and the Fyne desktop build
Prebuilt binaries are linked from the release page, covering Linux on x86-64, 386, ARM and ARM64, macOS on Arm64 and x86-64, and Windows on x86-64 and 386, plus GUI builds for Linux, macOS and Windows. If you would rather build from source, the `Makefile` sets up cross compilation through the standard Go environment variables, and each target names its output explicitly:
@GOOS=darwin go build -o build/comics-downloader-osx-arm ./cmd/downloader@GOOS=linux GOARCH=amd64 go build -o build/comics-downloader-linux-x86-64 ./cmd/downloaderThe GUI lives in a separate command, `./cmd/gui`, and it is built with `fyne-cross` rather than plain `go build`, because the Fyne toolkit needs platform specific handling for its OpenGL dependency:
@fyne-cross linux -output comics-downloader-gui ./cmd/guiThe `builds` target chains all of the platform targets together, and `remove-builds` clears the `build/` directory. The module requirements line up with that split: `fyne.io/fyne` and `fyne-io/mobile` are in the dependency list, and the indirect requirements include the Go OpenGL bindings that Fyne needs.
A separate detail from the documentation is worth knowing if you plan to automate this: the project points to a bash script for tracking favourite mangas on a Raspberry Pi, which suggests a small always-on machine running the daemon is the intended use.
The boundary the documentation does not draw
This is a scraper, and a scraper inherits the posture of the sites it reads. Several of the listed sites are scanlation and aggregator sites that host comics without a licence from the publisher, so the tool can be used to obtain comics the reader has no clear right to keep. That is a fact about the ecosystem rather than a defect in the code, but it decides whether you should automate the daemon mode against a given site at all.
The project itself is careful about its own scope. It is MIT licensed, which covers the code only, and the licence says nothing about the content it fetches. Nothing in the repository attempts to bypass a paywall, remove DRM, or defeat any protection, and there is no credential handling for accounts behind a login. If a site needs an account, the tool does not have a path for it.
The alternative approach depends on the goal. If you want one issue to read now, saving the images by hand in a browser and packaging them yourself does the same job without a scraper and without the legal ambiguity of a bulk fetch. If you want a whole series as a file, the scraper approach wins, because it understands the series listing, resolves the issue list, and does the packaging in one pass. The intermediate option is a generic downloader driven by a list of image URLs, which keeps the packaging script but gives up the site awareness.
Release tags are thin and the download links are pinned
The repository is not archived, and the last push was on 2026-07-04. The release history is sparser than that suggests. The most recent tag is v0.34.0-alpha from 2025-07-06, and before it sit v0.33.9 from 2024-02-28 and v0.33.9-alpha from 2024-02-22. In other words, the newest published artifact is still labelled alpha, and the two most recent tagged builds are more than a year old.
There is a practical wrinkle in the install instructions. Every download link in the documentation points at the v0.33.9 tag, so a reader who follows the instructions literally gets the February 2024 build rather than the newer alpha, and the Linux 386, macOS and Windows variants are all pinned to that same tag.
For a tool whose whole job depends on parsing the HTML of sites that change their layout without warning, this is the main operational risk. A scraper breaks when a site changes, and the fix usually arrives as a commit rather than a release. The practical consequence is that building from `main` is more current than the linked binaries, and the alpha tag is a better starting point than the pinned links if you can compile it yourself.
Editorial conclusion
Adopt comics-downloader if you read one of the listed sites, want the whole series on disk in a format a reader app can open, and are comfortable building from Go source or grabbing a prebuilt binary. Do not adopt it if you need support for a site outside the hardcoded list, if you want a reader with library management, or if you need to fetch titles that the sites host without permission. First check the supported site list against the series you want, confirm that the binary you download matches the tag you expect, since the release links point at v0.33.9 while the newest tag is an alpha, and read the licence terms of the site you are pulling from before you automate it.
Frequently asked questions
What output formats does comics-downloader support?
Four: pdf, epub, cbr and cbz, with pdf as the default. You pick one with the `-format` flag, for example `./comics-downloader -url=[your url] -format=epub`. A separate `-images-only` mode writes the raw images instead, in img, png or jpg with jpg as the default.
How do I download a whole comic series with comics-downloader?
Use the `-all` flag together with the URL of the series page or of any issue in that series: `./comics-downloader -url=[your url] -all`. For a slice of the series use `-range=[start-end]`, and for only the newest issue use `-last`.
Can comics-downloader check for new issues automatically?
Yes, with the `-daemon` flag, which works only alongside `-all` or `-last`. The `-daemon-timeout` flag sets how often the downloader runs and defaults to 600 seconds, so `./comics-downloader -url=[your url] -daemon -daemon-timeout=300` checks every five minutes.
Which sites does comics-downloader support?
The supported list is fixed in the source and covers comicextra.net, readallcomics.com, readcomiconline.li, mangareader.tv, mangatown.com, mangadex.org, mangakakalot.com and manganato.com. The `-country` option applies to MangaDex only, since it uses ISO 3166-1 codes, and the `-last` option is not available for MangaDex.
How do I build comics-downloader from source?
The `Makefile` cross compiles with the standard Go environment variables, for example `GOOS=darwin go build -o build/comics-downloader-osx-arm ./cmd/downloader`, and the `builds` target runs every platform target. The desktop GUI in `./cmd/gui` is built with `fyne-cross` instead of plain `go build`.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/girbons-comics-downloader)Was this useful?