+
+
+
+
+> This project encapsulates a Python API for crawling JM.
+>
+> With a few simple lines of Python code, you can download albums from JM to your local machine, with properly processed images.
+>
+> **Friendly Prompt: Cherish JM. In order to reduce the pressure on JM servers, please do not download too many albums at once 🙏🙏🙏.**
+
+[【Guide】Tutorial: Downloading JM Albums using GitHub Actions](../docs/sources/tutorial/1_github_actions.md)
+
+[【Guide】Tutorial: Exporting and downloading your JM favorites data](../docs/sources/tutorial/10_export_favorites.md)
+
+
+
+
+
+## Introduction
+
+The core function of this project is to download albums.
+
+Based on this, an easy-to-use, highly extensible framework is designated to meet a variety of download requirements.
+
+Currently, the core functions are relatively stable, and the project is in the maintenance phase.
+
+In addition to downloading, other JM interfaces are also implemented on demand. Existing features:
+
+- Login
+- Search albums (supports all search parameters)
+- Image downloading and decoding
+- Categories/Rankings
+- Album/Chapter details
+- Personal favorites layer
+- Interface encryption and decryption (for the APP API)
+
+## Installation Guide
+
+> ⚠ If you have not installed Python, you must install Python before executing the following steps. Version >= 3.7 is required ([Download from Python Official Site](https://www.python.org/downloads/)).
+
+* Install via official pip source (recommended, the update command is identical)
+
+ ```shell
+ pip install jmcomic -i https://pypi.org/project -U
+ ```
+* Install from source code
+
+ ```shell
+ pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
+ ```
+
+## Quick Start
+
+### 1. Downloading an album
+
+All you need is the following code to download all chapter images of the album `JM123`:
+
+```python
+import jmcomic # Import this module, you need to install it first.
+jmcomic.download_album('123') # Pass the ID of the album to download the entire album locally.
+```
+
+The `download_album` method above also accepts an `option` parameter to control the configuration, which includes JM domain names, network proxies, image format conversions, plugins, and more.
+
+You might need these options. It is recommended to create an option instance from a configuration file and use it to download albums, as shown in the next section:
+
+### 2. Using option for advanced downloading
+
+1. First, create a configuration file, let's say `option.yml`
+
+ This file uses a specific format, please refer to the documentation → [Configuration File Guide](../docs/sources/option_file_syntax.md)
+
+ Here is a demonstration. Assuming you want to convert the downloaded images into `png` format, you should write the following into `option.yml`:
+
+```yml
+download:
+ image:
+ suffix: .png # This option converts the downloaded image to png format
+```
+
+2. Secondly, run the following Python code
+
+```python
+import jmcomic
+
+# Create configuration object
+option = jmcomic.create_option_by_file('Path to your configuration file, e.g. D:/option.yml')
+# Download the album using the option configured
+jmcomic.download_album(123, option)
+# Equivalent to: option.download_album(123)
+```
+
+### 3. Using the Command Line
+> If your only goal is to download albums, using the command line is simpler and more straightforward.
+>
+> For example, on Windows, press `Win + R`, enter `jmcomic xxx`, and you can download the album.
+
+Examples:
+
+Command to download album 123:
+
+```sh
+jmcomic 123
+```
+
+Command to download chapter 456 of album 123:
+```sh
+jmcomic 123 p456
+```
+
+The command-line mode also supports custom options. You can use environment variables or command line arguments:
+
+a. Specify the option file path via `--option` argument
+
+```sh
+jmcomic 123 --option="D:/a.yml"
+```
+
+b. Set the environment variable `JM_OPTION_PATH` to the option file path (recommended)
+
+> Please Google how to configure environment variables. By using powershell: `setx JM_OPTION_PATH "D:/a.yml"` (Requires a restart to take effect).
+
+```sh
+jmcomic 123
+```
+
+
+
+## Advanced Usage
+
+Please check the documentation homepage → [jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)
+
+*(Tip: jmcomic provides many options. For most download requirements, you can find a corresponding configuration or plugin setup.)*
+
+## Key Features
+
+- **Bypass Cloudflare anti-bot mechanisms**
+- **Implement the latest decryption logic for the JM APP API (1.6.3)**
+- Multiple usages:
+
+ - GitHub Actions: Enter the album ID directly on the webpage to download ([Tutorial: Download JM Albums using GitHub Actions](../docs/sources/tutorial/1_github_actions.md))
+ - Command Line: No need to write Python code, easy to use ([Tutorial: Download JM Albums by Command Line](../docs/sources/tutorial/2_command_line.md))
+ - Python Code: The most powerful usage, requiring basic Python programming knowledge
+- Supports both **Web** and **Mobile** implementations, switchable via configuration (**Mobile is IP restriction-free and very compatible, Web restricts some IP regions but offers higher efficiency**)
+- Built-in **auto-retry and domain switching** mechanisms
+- **Multi-threaded downloading** (can be fine-tuned to one-thread-per-image, greatly boosting speed)
+- **Highly configurable**
+
+ - Can work smoothly out of the box without configurations
+ - Supported formats to generate `Option` instances
+ - Configurable items include: `Domains` `Clients` `Disk Caching` `Concurrent chapters/images downloads` `Format Conversions` `Path rules` `Request Meta (headers, cookies, proxies)` `Simplified/Traditional Chinese Conversion`, etc.
+- **Highly Extensible**
+
+ - Supports custom callbacks before/after downloading albums/chapters/images
+ - Customizable objects: `Downloader` `Option` `Client` `Entities`, etc.
+ - Supports custom logging and exception listener mechanics
+ - **Embedded with powerful Plugins** to easily extend features or inject others':
+ - `Login Plugin`
+ - `Hardware usage monitor plugin`
+ - `Filter-new-chapter plugin`
+ - `Zip-files plugin`
+ - `Client proxy plugin`
+ - `Specific image suffix format downloader`
+ - `Send via QQ Mail plugin`
+ - `Log topic filter plugin`
+ - `Auto fetch browser cookies plugin`
+ - `Export favorites to CSV plugin`
+ - `Merge images into PDF plugin`
+ - `Merge images into Long png plugin`
+ - `Local chapter web-viewer plugin`
+ - `Subscribe album update plugin`
+ - `Skip small chapters plugin`
+ - `Duplicate detection and deletion plugin`
+ - `Path string replacement plugin`
+ - `Advanced retry plugin`
+ - `Download cover plugin`
+
+## Prerequisites
+
+* Python >= 3.7. Version 3.9+ is highly recommended because `jmcomic`'s dependencies may not perfectly support prior versions.
+* Since this is a personal project, the documentation/examples may occasionally be out of sync. Please feel free to open an Issue for any clarifications.
+
+## Directory Structure
+
+* `.github`: GitHub Actions configuration files
+* `assets`: Resources aside from pure code
+ * `docs`: Documentation
+ * `option`: Test/example configurations
+* `src`: Main code base
+ * `jmcomic`: Core `jmcomic` package
+* `tests`: Unit tests relying on `unittest`
+* `usage`: Examples of usage implementations
+
+## Acknowledgments
+
+### Image Segmentation logic + JM Mobile APIs Support
+
+
+
+
+
+
+
+
diff --git a/assets/readme/README-jp.md b/assets/readme/README-jp.md
new file mode 100644
index 000000000..ea6a2b359
--- /dev/null
+++ b/assets/readme/README-jp.md
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+> 이 프로젝트는 JM을 크롤링하기 위한 Python API를 캡슐화한 것입니다.
+>
+> 몇 줄의 간단한 Python 코드만으로 JM의 앨범을 로컬로 원활하게 다운로드할 수 있으며, 이미지 또한 모두 처리된 상태입니다.
+>
+> **안내: JM 서버의 부하를 줄이기 위해 한 번에 너무 많은 앨범을 다운로드하지 말아주세요 🙏🙏🙏**
+
+[【가이드】튜토리얼: GitHub Actions를 사용하여 다운로드하기](../docs/sources/tutorial/1_github_actions.md)
+
+[【가이드】튜토리얼: 즐겨찾기 데이터를 내보내고 다운로드하기](../docs/sources/tutorial/10_export_favorites.md)
+
+
+
+
+
+## 프로젝트 소개
+
+본 프로젝트의 핵심 기능은 앨범 다운로드입니다.
+
+이를 기반으로 사용하기 쉽고 확장성이 뛰어나며 일부 특수한 다운로드 요구를 충족할 수 있는 프레임워크가 설계되었습니다.
+
+현재 핵심 기능은 꽤 안정적으로 동작하며, 프로젝트는 유지보수 단계에 있습니다.
+
+다운로드 기능 외에도, 필요한 경우에 한해 추가적인 JM 인터페이스가 구현되어 있습니다. 기존 기능들은 아래와 같습니다:
+
+- 로그인
+- 앨범 검색 (모든 검색 매개변수 지원)
+- 이미지 다운로드 및 복호화
+- 카테고리 / 랭킹
+- 앨범 / 챕터(에피소드) 세부 정보
+- 개인 즐겨찾기
+- 인터페이스 암호화 및 복호화 (APP API)
+
+## 설치 가이드
+
+> ⚠ Python이 시스템에 설치되어 있지 않다면, 다음 단계를 진행하기 전에 반드시 Python을 먼저 설치해주시기 바랍니다. 필요 버전 >= 3.7 ([Python 공식 사이트에서 다운로드하기](https://www.python.org/downloads/)).
+
+* 공식 pip 저장소를 통한 설치 (추천. 업데이트 명령어도 동일합니다)
+
+ ```shell
+ pip install jmcomic -i https://pypi.org/project -U
+ ```
+* 소스코드를 이용한 설치
+
+ ```shell
+ pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
+ ```
+
+## 빠른 시작
+
+### 1. 앨범 다운로드하기
+
+아래의 간단한 코드를 사용하면 `JM123` 앨범의 모든 챕터 이미지를 다운로드할 수 있습니다:
+
+```python
+import jmcomic # 이 모듈을 임포트합니다. 사전 설치 필요.
+jmcomic.download_album('123') # 다운로드하려는 앨범의 ID를 함수에 넘겨 로컬에 저장합니다.
+```
+
+위에 보이는 `download_album` 메서드는 구성 항목을 제어하는 부가적인 `option` 매개변수를 지원합니다. (예: JM 도메인, 네트워크 프록시, 이미지 포맷 변환, 플러그인 등)
+
+사용자 환경에 맞게 이러한 구성 옵션이 필요할 수도 있습니다. 구성 파일로 옵션을 만들고 이를 사용하여 다운로드하는 것을 권장합니다. 아래의 챕터를 참고하세요:
+
+### 2. Option 설정을 사용하여 앨범 다운로드
+
+1. 먼저 구성 파일을 하나 만듭니다. 이름은 자율이며, 예시로 `option.yml`을 만들어보겠습니다.
+
+ 파일에는 특정한 구문 형식이 존재합니다. 문서를 참조해주세요 → [환경 설정 파일 안내](../docs/sources/option_file_syntax.md)
+
+ 한 가지 데모를 보여드리자면, 다운로드한 이미지를 png 포맷으로 변환하고 싶으시다면 `option.yml`안에 아래와 비슷한 내용을 기입하면 됩니다:
+
+```yml
+download:
+ image:
+ suffix: .png # 이 구성은 다운로드된 이미지를 png 로 변환하는데 쓰입니다.
+```
+
+2. 두 번째로, 아래의 Python 코드를 실행합니다.
+
+```python
+import jmcomic
+
+# 환경 설정 객체를 생성합니다
+option = jmcomic.create_option_by_file('내 설정 파일 경로, 예: D:/option.yml')
+# 생성된 option 객체를 통해 앨범을 다운로드합니다
+jmcomic.download_album(123, option)
+# 동등한 사용법: option.download_album(123)
+```
+
+### 3. 커맨드라인 (명령줄) 사용법
+> 앨범만을 다운로드 하려면 위에서 말한 방법보다 이렇게 사용하는것이 훨씬 편하고 직관적입니다.
+>
+> 예를 들어 윈도우에서는 단순하게 `Win+r` 단축키를 이용해 `jmcomic xxx` 를 타이핑하고 앨범을 즉시 내려받을 수 있습니다.
+
+예시:
+
+123번 앨범을 다운로드 하는 명령어
+
+```sh
+jmcomic 123
+```
+123번 앨범의 456번 챕터 이미지를 다운로드 하는 명령어
+```sh
+jmcomic 123 p456
+```
+
+커맨드라인 모드에서는 임의의 Option을 통한 커스텀 설정을 지원합니다. 환경변수나 명령어 인자를 설정할 수 있습니다:
+
+a. 명령줄 매개변수 `--option`을 사용해 파일 경로를 지정
+
+```sh
+jmcomic 123 --option="D:/a.yml"
+```
+
+b. 환경 변수 `JM_OPTION_PATH` 를 옵션 파일명으로 설정 (권장)
+
+> 환경 변수는 구글링을 통하거나 powershell 터미널에서 다음을 쳐서 만들 수 있습니다: `setx JM_OPTION_PATH "D:/a.yml"` 설정 후에는 다시 작동해야 적용이 됩니다.
+
+```sh
+jmcomic 123
+```
+
+
+
+## 활용법
+
+자세한 활용 문서를 원하시면 문서 사이트로 접속하세요 → [jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)
+
+(힌트: jmcomic은 다양한 다운로드 설정 항목을 제공합니다. 대부분의 다운로드 요구 사항과 관련된 구성 항목 및 플러그인을 쉽게 찾을 수 있을 것입니다.)
+
+## 프로젝트의 특징
+
+- **Cloudflare 크롤러 방지 수칙 우회**
+- **금만(1.6.3) APP 인터페이스 최근의 암호화/복호화 알고리즘 완벽 지원**
+- 다양한 사용 방법:
+
+ - GitHub Actions: 웹페이지 내 바로 앨범 ID를 통하여 받을 수 있습니다. ([튜토리얼:GitHub Actions를 이용해 다운로드](../docs/sources/tutorial/1_github_actions.md))
+ - 커맨드라인: 파이썬 코드를 짤 필요 없이 단순합니다. ([튜토리얼:명령줄을 이용해 다운로드](../docs/sources/tutorial/2_command_line.md))
+ - Python 코드 구현: 가장 직관적이고 강력하며 최소한의 파이썬 기반 지식이 필요합니다.
+- **웹 인터페이스** 및 **모바일 인터페이스** 지원. 간단한 구성을 통한 전환 지원. (**모바일 구동환경에서의 IP제한을 돌파하고 뛰어난 호환이 됩니다, 웹은 특정 지역에서 제약받지만 성능은 최고입니다.**)
+- **자동 재접속(Retry) 및 도메인 전환 구조** 기본지원
+- **멀티스레드 다운로드** (1이미지 당 1스레드를 통한 극단적인 빠른 스피드)
+- **강력한 구성 옵션**
+
+ - 환경 구성 없이도 매우 편하게 즐길 수 있습니다.
+ - 각종 파일 포맷 종류 지원
+ - 구성 가능 요소: `요청된 도메인 네임` `클라이언트 구현체` `디스크 캐시 사용 여부` `동시에 다운로드 할 파일의 개수` `포맷 바꾸기` `규칙적으로 이미지 저장하기` `요청용 메타데이터정보들(headers, cookies, proxies)` `중국어 간체/번체 변환` 등등
+- **자율성 확보 (Extensible)**
+
+ - 챕터/이미지의 다운로드 전, 다운로드 후의 콜백 기능 및 커스텀 함수 동작.
+ - 여러 사용자 정의 클래스를 구성하도록 개방: `Downloader (스케줄 관리)` `Option (구성 관리)` `Client (요청 관리)` `Entity 생성` 및 등등.
+ - 사용자 맞춤형 로거, 에러 감지기 시스템
+ - **강력한 'Plugin 시스템', 타인의 플러그인 이용가능, 현재 기본적으로 딸려 나오는 지원 플러그인**:
+ - `로그인 플러그인`
+ - `하드웨어 리소스 추적 플러그인`
+ - `새로 올라온 챕터만을 받는 플러그인`
+ - `압축(Archive) 지원 플러그인`
+ - `클라이언트 프록시 플러그인`
+ - `특정한 이미지 확장자를 지정하여 받는 플러그인`
+ - `QQ메일 알리미 플러그인`
+ - `로그 주제 필터 플러그인`
+ - `웹 브라우저의 쿠키(Cookies)를 능동적으로 받는 플러그인`
+ - `북마크 목록을 CSV 표로 추출하는 플러그인`
+ - `모든 이미지를 읽기용 PDF 파일 한 개로 결합하는 플러그인`
+ - `모든 이미지를 좁고 긴 하나의 원본 PNG 사진으로 결합하는 플러그인`
+ - `로컬 디스크에 받은 만화를 열람할 웹서버 호스팅 플러그인`
+ - `앨범 업데이트 구독 플러그인`
+ - `이미지 수가 적은 챕터 건너뛰기 플러그인`
+ - `중복 이미지를 탐지하고 제거하는 플러그인`
+ - `경로 문자열 바꾸기 플러그인`
+ - `고급 재접속(Retry) 플러그인`
+ - `표지 다운로드 플러그인`
+
+## 사용 팁
+
+* Python 3.7 이상을 요구하지만, 라이브러리와 jmcomic 패키지의 충돌을 막기 위해 3.9 이상의 쓰임을 추천합니다.
+* 여유 시간에 만들어 지는 프로젝트이기에 정보나 활용 코드의 늦은 갱신이 다분합니다. 이슈(Issue)페이지로 연락주시기 바랍니다!
+
+## 프로젝트 폴더 안내
+
+* `.github`: GitHub Actions 구성 파일
+* `assets`: 코드가 아닌 관련 리소스
+ * `docs`: 상세 가이드 및 관련 프로젝트 설명 문서
+ * `option`: 설정 샘플 예제
+* `src`: 실용 소스코드 폴더
+ * `jmcomic`: `jmcomic` 핵심 모듈
+* `tests`: 유닛 테스트 패키지 구조, 자동화 테스트
+* `usage`: 실사용 시 참조하면 좋은 활용 구조
+
+## 이하 프로젝트들에 감사드립니다.
+
+### 이미지 복구/분할 알고리즘 & JM 모바일 API 호환
+
+
+
+
+
+
+
+
From 0bd220cdce54e35bf33a848380dd7c3c5a321271 Mon Sep 17 00:00:00 2001
From: hect0x7 <93357912+hect0x7@users.noreply.github.com>
Date: Mon, 23 Feb 2026 02:17:37 +0800
Subject: [PATCH 3/5] docs: resolve PR review feedback and issues
---
README.md | 2 +-
.../docs/sources/tutorial/0_common_usage.md | 37 ++++++++++++-------
.../sources/tutorial/12_domain_strategy.md | 5 ++-
assets/docs/sources/tutorial/6_plugin.md | 8 ++++
assets/readme/README-en.md | 2 +-
assets/readme/README-jp.md | 2 +-
assets/readme/README-kr.md | 4 +-
7 files changed, 39 insertions(+), 21 deletions(-)
diff --git a/README.md b/README.md
index 698f8c02a..2529466dd 100644
--- a/README.md
+++ b/README.md
@@ -64,7 +64,7 @@
* 通过pip官方源安装(推荐,并且更新也是这个命令)
```shell
- pip install jmcomic -i https://pypi.org/project -U
+ pip install jmcomic -U
```
* 通过源代码安装
diff --git a/assets/docs/sources/tutorial/0_common_usage.md b/assets/docs/sources/tutorial/0_common_usage.md
index 143caf5a7..23514dd9d 100644
--- a/assets/docs/sources/tutorial/0_common_usage.md
+++ b/assets/docs/sources/tutorial/0_common_usage.md
@@ -239,15 +239,20 @@ for page in cl.categories_filter_gen(page=1, # 起始页码
print(aid, atitle)
# 高级用法:使用 generator 的 send() 方法在遍历中途动态修改查询条件
+# 注意:必须用 while 循环手动接收 send() 的返回值,避免在 for 循环内调用 send() 跳过分页
generator = cl.categories_filter_gen(page=1, time=JmMagicConstants.TIME_WEEK)
-for page in generator:
- # 打印第一页
- for aid, atitle in page:
- print(aid, atitle)
-
- # 假设我们只想看前一页,下一页想换一个排序方式
- # 调用 send 传入包含新参数的 dict 即可覆盖原来的查询条件
- generator.send({"order_by": JmMagicConstants.ORDER_BY_LATEST})
+try:
+ page = next(generator) # 预先启动生成器
+ while True:
+ # 打印第一页
+ for aid, atitle in page:
+ print(aid, atitle)
+
+ # 假设我们只想看前一页,下一页想换一个排序方式
+ # 调用 send 传入包含新参数的 dict 即可覆盖原来的查询条件
+ page = generator.send({"order_by": JmMagicConstants.ORDER_BY_LATEST})
+except StopIteration:
+ pass
```
@@ -296,12 +301,16 @@ for page in html_cl.search_gen(search_query='mana',
# 高级用法:使用 generator 的 send() 方法进行手动翻页或修改查询条件
generator = html_cl.search_gen('mana')
-for page in generator:
- for aid, atitle in page.iter_id_title():
- print(aid, atitle)
-
- # 可直接动态传参改变搜索条件,例如下一页换成搜索 'nana'
- generator.send({"search_query": 'nana'})
+try:
+ page = next(generator)
+ while True:
+ for aid, atitle in page.iter_id_title():
+ print(aid, atitle)
+
+ # 可直接动态传参改变搜索条件,例如下一页换成搜索 'nana'
+ page = generator.send({"search_query": 'nana'})
+except StopIteration:
+ pass
```
diff --git a/assets/docs/sources/tutorial/12_domain_strategy.md b/assets/docs/sources/tutorial/12_domain_strategy.md
index 2fcd4eb76..48f944176 100644
--- a/assets/docs/sources/tutorial/12_domain_strategy.md
+++ b/assets/docs/sources/tutorial/12_domain_strategy.md
@@ -70,7 +70,8 @@ op = JmOption.default()
op.client.retry_times = 3
# 应用域名池新建包含该域名的 Client (记得指定 impl='html')
-cl = op.new_jm_client(domain_list=domains, impl='html')
+# 将新建的 client 赋值回 op,使其在后续的下载中生效
+op.client = op.new_jm_client(domain_list=domains, impl='html')
download_album('438696', op)
```
@@ -86,7 +87,7 @@ from jmcomic import *
domain = JmModuleConfig.get_html_domain()
op = JmOption.default()
-cl = op.new_jm_client(domain_list=[domain], impl='html')
+op.client = op.new_jm_client(domain_list=[domain], impl='html')
```
diff --git a/assets/docs/sources/tutorial/6_plugin.md b/assets/docs/sources/tutorial/6_plugin.md
index 4a2b1800b..bd8ea92cb 100644
--- a/assets/docs/sources/tutorial/6_plugin.md
+++ b/assets/docs/sources/tutorial/6_plugin.md
@@ -124,7 +124,13 @@ option = create_option('xxx')
如果你编写的插件是异步的(比如启动了新线程处理任务),此时主程序可能会先于插件执行完毕而退出。为解决此问题,`JmOptionPlugin` 提供了注册等待挂起的功能:
```python
+import threading
+import time
+from jmcomic import JmOptionPlugin, JmModuleConfig
+
class MyAsyncPlugin(JmOptionPlugin):
+ plugin_key = 'my_async_plugin'
+
def invoke(self, **kwargs) -> None:
# 1. 告诉 option 有一个异步插件正在运行,请主线程在退出前关掉我或等我
self.enter_wait_list()
@@ -145,6 +151,8 @@ class MyAsyncPlugin(JmOptionPlugin):
self.is_running = False # 发送停机信号
if hasattr(self, 'thread') and self.thread.is_alive():
self.thread.join() # 阻塞直到线程安全退出
+
+JmModuleConfig.register_plugin(MyAsyncPlugin)
```
这样,程序在所有任务执行完退出的最后一刻,会通过 `option.wait_all_plugins_finish()` 遍历所有调用过 `enter_wait_list()` 挂起的插件,并调用其 `wait_until_finish()` 方法。只要你在该方法中实现了停机信号或阻塞等待的发送,主线程就会等待你的异步逻辑全部安全并优雅地退出。
diff --git a/assets/readme/README-en.md b/assets/readme/README-en.md
index 27d7677eb..49a73cc18 100644
--- a/assets/readme/README-en.md
+++ b/assets/readme/README-en.md
@@ -64,7 +64,7 @@ In addition to downloading, other JM interfaces are also implemented on demand.
* Install via official pip source (recommended, the update command is identical)
```shell
- pip install jmcomic -i https://pypi.org/project -U
+ pip install jmcomic -U
```
* Install from source code
diff --git a/assets/readme/README-jp.md b/assets/readme/README-jp.md
index ea6a2b359..5aab7e21a 100644
--- a/assets/readme/README-jp.md
+++ b/assets/readme/README-jp.md
@@ -64,7 +64,7 @@
* 公式 pip ソースからインストール(推奨。アップデートもこのコマンドを使用します)
```shell
- pip install jmcomic -i https://pypi.org/project -U
+ pip install jmcomic -U
```
* ソースコードからインストール
diff --git a/assets/readme/README-kr.md b/assets/readme/README-kr.md
index 6a22fdc30..ffea01101 100644
--- a/assets/readme/README-kr.md
+++ b/assets/readme/README-kr.md
@@ -64,7 +64,7 @@
* 공식 pip 저장소를 통한 설치 (추천. 업데이트 명령어도 동일합니다)
```shell
- pip install jmcomic -i https://pypi.org/project -U
+ pip install jmcomic -U
```
* 소스코드를 이용한 설치
@@ -114,7 +114,7 @@ jmcomic.download_album(123, option)
```
### 3. 커맨드라인 (명령줄) 사용법
-> 앨범만을 다운로드 하려면 위에서 말한 방법보다 이렇게 사용하는것이 훨씬 편하고 직관적입니다.
+> 앨범만을 다운로드 하려면 위에서 말한 방법보다 이렇게 사용하는 것이 훨씬 편하고 직관적입니다.
>
> 예를 들어 윈도우에서는 단순하게 `Win+r` 단축키를 이용해 `jmcomic xxx` 를 타이핑하고 앨범을 즉시 내려받을 수 있습니다.
From be671f7521bb4f64b9833b637958a4d3ec61149d Mon Sep 17 00:00:00 2001
From: hect0x7 <93357912+hect0x7@users.noreply.github.com>
Date: Mon, 23 Feb 2026 02:24:53 +0800
Subject: [PATCH 4/5] docs: resolve remaining PR review issues in README-en.md
---
assets/readme/README-en.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/assets/readme/README-en.md b/assets/readme/README-en.md
index 49a73cc18..89cb523d4 100644
--- a/assets/readme/README-en.md
+++ b/assets/readme/README-en.md
@@ -43,7 +43,7 @@
The core function of this project is to download albums.
-Based on this, an easy-to-use, highly extensible framework is designated to meet a variety of download requirements.
+Based on this, an easy-to-use, highly extensible framework is designed to meet various download requirements.
Currently, the core functions are relatively stable, and the project is in the maintenance phase.
@@ -54,7 +54,7 @@ In addition to downloading, other JM interfaces are also implemented on demand.
- Image downloading and decoding
- Categories/Rankings
- Album/Chapter details
-- Personal favorites layer
+- Personal favorites
- Interface encryption and decryption (for the APP API)
## Installation Guide
@@ -151,7 +151,7 @@ jmcomic 123
## Advanced Usage
-Please check the documentation homepage → [jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)
+Please check the documentation homepage → [jmcomic.readthedocs.io (Chinese language)](https://jmcomic.readthedocs.io/zh-cn/latest)
*(Tip: jmcomic provides many options. For most download requirements, you can find a corresponding configuration or plugin setup.)*
From ba3b4767c3a8187b64f7e356bd22bcb86a5c9cf6 Mon Sep 17 00:00:00 2001
From: hect0x7 <93357912+hect0x7@users.noreply.github.com>
Date: Mon, 23 Feb 2026 02:26:13 +0800
Subject: [PATCH 5/5] chore: add .agent to .gitignore
---
.gitignore | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 5990fab5c..56502f4ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -161,4 +161,5 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-.idea/
\ No newline at end of file
+.idea/
+.agent
\ No newline at end of file