Mayo commited on
Commit
a33486a
·
unverified ·
1 Parent(s): ccd8887

docs: list more LLMs

Browse files
README.md CHANGED
@@ -24,7 +24,7 @@ Under the hood, Koharu uses [candle](https://github.com/huggingface/candle) and
24
  - OCR for manga dialogue, captions, and other page text
25
  - Inpainting to remove source lettering from the page
26
  - Translation with local or remote LLM backends
27
- - Vertical CJK layout and text rendering
28
  - Layered PSD export with editable text
29
  - Local HTTP API and MCP server for automation
30
 
@@ -74,6 +74,12 @@ You can then open the Web UI at `http://localhost:4000`.
74
 
75
  For runtime modes, ports, and local endpoints, see [Run GUI, Headless, and MCP Modes](https://koharu.rs/how-to/run-gui-headless-and-mcp/).
76
 
 
 
 
 
 
 
77
  ## GPU acceleration
78
 
79
  Koharu supports CUDA, Metal, and Vulkan. CPU fallback is always available when the accelerated path is unavailable or not worth the setup cost on your system.
@@ -149,21 +155,34 @@ Koharu supports both local and remote LLM backends. When possible, it also tries
149
 
150
  #### Local LLMs
151
 
152
- Koharu supports quantized GGUF models through [llama.cpp](https://github.com/ggml-org/llama.cpp). These models run on your machine and are downloaded on demand when you select them in Settings. Suggested models:
 
 
 
 
 
 
 
 
 
 
 
 
153
 
154
  For translating to English:
155
 
156
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): around 8.5 GB in Q8_0, best when translation quality matters more than speed or memory use
157
- - [lfm2-350m-enjp-mt](https://huggingface.co/LiquidAI/LFM2-350M-ENJP-MT-GGUF): very small and easy to run on CPUs or low-memory GPUs, good for quick previews and low-spec machines
 
158
 
159
  For translating to Chinese:
160
 
161
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): around 6.3 GB, a good balance of quality and speed on 8 GB GPUs
162
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): lighter and faster, useful on mid-range GPUs or CPU-only setups
163
 
164
- For other languages, you can use:
165
 
166
- - [hunyuan-7b-mt-v1.0](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): around 6.3 GB, with decent multilingual translation quality
167
 
168
  LLMs are downloaded on demand when you pick a model in Settings. If you are constrained by memory, start with a smaller model. If you have the VRAM or RAM budget, the 7B and 8B models generally produce better translations.
169
 
@@ -177,6 +196,14 @@ Koharu can also translate through remote or self-hosted API providers instead of
177
  - DeepSeek
178
  - OpenAI Compatible, including LM Studio, OpenRouter, or any endpoint that exposes the OpenAI-style `/v1/models` and `/v1/chat/completions` APIs
179
 
 
 
 
 
 
 
 
 
180
  Remote providers are configured in **Settings > API Keys**. OpenAI-compatible providers also need a custom base URL. API keys are optional for local servers such as LM Studio, but are usually required for hosted services such as OpenRouter.
181
 
182
  Use a remote provider if you do not want to download local models, if you want to reduce local VRAM or RAM use, or if you already have a hosted model endpoint. Keep in mind that the OCR text selected for translation is sent to the provider you configured.
 
24
  - OCR for manga dialogue, captions, and other page text
25
  - Inpainting to remove source lettering from the page
26
  - Translation with local or remote LLM backends
27
+ - Vertical CJK layout and text rendering with automatic contrasting black/white default outlines
28
  - Layered PSD export with editable text
29
  - Local HTTP API and MCP server for automation
30
 
 
74
 
75
  For runtime modes, ports, and local endpoints, see [Run GUI, Headless, and MCP Modes](https://koharu.rs/how-to/run-gui-headless-and-mcp/).
76
 
77
+ ### Runtime settings
78
+
79
+ `Settings > Runtime` controls the shared local data path plus HTTP connect timeout, read timeout, and retry count used by downloads and provider requests.
80
+
81
+ Those values are loaded at startup, so applying changes saves the config and restarts the app.
82
+
83
  ## GPU acceleration
84
 
85
  Koharu supports CUDA, Metal, and Vulkan. CPU fallback is always available when the accelerated path is unavailable or not worth the setup cost on your system.
 
155
 
156
  #### Local LLMs
157
 
158
+ Koharu supports quantized GGUF models through [llama.cpp](https://github.com/ggml-org/llama.cpp). These models run on your machine and are downloaded on demand when you select them in Settings.
159
+
160
+ If you want general-purpose local models first, the built-in picker includes:
161
+
162
+ - Gemma 4 instruct: [gemma4-e2b-it](https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF), [gemma4-e4b-it](https://huggingface.co/unsloth/gemma-4-E4B-it-GGUF), [gemma4-26b-a4b-it](https://huggingface.co/unsloth/gemma-4-26B-A4B-it-GGUF), [gemma4-31b-it](https://huggingface.co/unsloth/gemma-4-31B-it-GGUF)
163
+ - Qwen 3.5: [qwen3.5-0.8b](https://huggingface.co/unsloth/Qwen3.5-0.8B-GGUF), [qwen3.5-2b](https://huggingface.co/unsloth/Qwen3.5-2B-GGUF), [qwen3.5-4b](https://huggingface.co/unsloth/Qwen3.5-4B-GGUF), [qwen3.5-9b](https://huggingface.co/unsloth/Qwen3.5-9B-GGUF), [qwen3.5-27b](https://huggingface.co/unsloth/Qwen3.5-27B-GGUF), [qwen3.5-35b-a3b](https://huggingface.co/unsloth/Qwen3.5-35B-A3B-GGUF)
164
+
165
+ If you want uncensored / NSFW-capable local models, the built-in picker also includes:
166
+
167
+ - Gemma 4 uncensored: [gemma4-e2b-uncensored](https://huggingface.co/HauhauCS/Gemma-4-E2B-Uncensored-HauhauCS-Aggressive), [gemma4-e4b-uncensored](https://huggingface.co/HauhauCS/Gemma-4-E4B-Uncensored-HauhauCS-Aggressive)
168
+ - Qwen 3.5 uncensored: [qwen3.5-2b-uncensored](https://huggingface.co/HauhauCS/Qwen3.5-2B-Uncensored-HauhauCS-Aggressive), [qwen3.5-4b-uncensored](https://huggingface.co/HauhauCS/Qwen3.5-4B-Uncensored-HauhauCS-Aggressive), [qwen3.5-9b-uncensored](https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive), [qwen3.5-27b-uncensored](https://huggingface.co/HauhauCS/Qwen3.5-27B-Uncensored-HauhauCS-Aggressive), [qwen3.5-35b-a3b-uncensored](https://huggingface.co/HauhauCS/Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive)
169
+
170
+ If you want fine-tuned translation models, built-in options include:
171
 
172
  For translating to English:
173
 
174
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): around 8.5 GB in Q8_0, best when translation quality matters more than speed or memory use
175
+ - [lfm2.5-1.2b-instruct](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Instruct-GGUF): a smaller multilingual instruct model that is easier to run on CPUs or low-memory GPUs
176
+ - [sugoi-14b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-14B-Ultra-GGUF) and [sugoi-32b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-32B-Ultra-GGUF): larger translation-oriented options when you have more VRAM or RAM available
177
 
178
  For translating to Chinese:
179
 
180
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): around 6.3 GB, a good balance of quality and speed on 8 GB GPUs
181
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): lighter and faster, useful on mid-range GPUs or CPU-only setups
182
 
183
+ For broader language coverage:
184
 
185
+ - [hunyuan-mt-7b](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): around 6.3 GB, with broad multilingual translation coverage
186
 
187
  LLMs are downloaded on demand when you pick a model in Settings. If you are constrained by memory, start with a smaller model. If you have the VRAM or RAM budget, the 7B and 8B models generally produce better translations.
188
 
 
196
  - DeepSeek
197
  - OpenAI Compatible, including LM Studio, OpenRouter, or any endpoint that exposes the OpenAI-style `/v1/models` and `/v1/chat/completions` APIs
198
 
199
+ Current built-in remote model defaults:
200
+
201
+ - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
202
+ - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
203
+ - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
204
+ - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-Chat`)
205
+ - OpenAI Compatible: models are discovered from the configured endpoint
206
+
207
  Remote providers are configured in **Settings > API Keys**. OpenAI-compatible providers also need a custom base URL. API keys are optional for local servers such as LM Studio, but are usually required for hosted services such as OpenRouter.
208
 
209
  Use a remote provider if you do not want to download local models, if you want to reduce local VRAM or RAM use, or if you already have a hosted model endpoint. Keep in mind that the OCR text selected for translation is sent to the provider you configured.
docs/en-US/explanation/models-and-providers.md CHANGED
@@ -24,13 +24,13 @@ Some models are used directly from upstream Hugging Face repos, while converted
24
 
25
  ### What each vision model is
26
 
27
- | Model | Model type | Why Koharu uses it |
28
- | --- | --- | --- |
29
- | `comic-text-bubble-detector` | object detector | finds text blocks and speech bubble regions in one pass |
30
- | `comic-text-detector` | segmentation network | produces a text mask for cleanup |
31
- | `PaddleOCR-VL-1.5` | vision-language model | reads cropped text into text tokens |
32
- | `aot-inpainting` | inpainting network | reconstructs masked image regions after text removal |
33
- | `YuzuMarker.FontDetection` | classifier / regressor | estimates font and style hints for rendering |
34
 
35
  The important design choice is that Koharu does not use one model for every page task. Detection, segmentation, OCR, and inpainting all need different output shapes:
36
 
@@ -54,19 +54,29 @@ Koharu supports local GGUF models through [llama.cpp](https://github.com/ggml-or
54
 
55
  In practice, the local models are usually quantized decoder-only transformers. GGUF is the model format; `llama.cpp` is the inference runtime.
56
 
57
- ### Suggested local models for English output
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): around 8.5 GB in Q8_0 form, best when translation quality matters most
60
- - [lfm2-350m-enjp-mt](https://huggingface.co/LiquidAI/LFM2-350M-ENJP-MT-GGUF): very small and useful for low-memory systems or quick previews
 
61
 
62
- ### Suggested local models for Chinese output
63
 
64
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): a balanced choice for quality and speed on 8 GB class GPUs
65
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): a lighter option for mid-range or CPU-heavy setups
66
 
67
- ### Suggested local model for broader language coverage
68
 
69
- - [hunyuan-7b-mt-v1.0](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): a multi-language option with moderate hardware requirements
 
 
 
 
 
 
 
 
 
70
 
71
  ## Remote providers
72
 
@@ -80,6 +90,16 @@ Supported providers include:
80
  - DeepSeek
81
  - OpenAI-compatible APIs such as LM Studio, OpenRouter, or any endpoint that exposes `/v1/models` and `/v1/chat/completions`
82
 
 
 
 
 
 
 
 
 
 
 
83
  Remote providers are configured in **Settings > API Keys**.
84
 
85
  For a step-by-step setup guide for LM Studio, OpenRouter, and similar endpoints, see [Use OpenAI-Compatible APIs](../how-to/use-openai-compatible-api.md).
@@ -110,4 +130,4 @@ For background theory behind the model categories on this page, see:
110
  - [Fourier transform on Wikipedia](https://en.wikipedia.org/wiki/Fourier_transform)
111
  - [Image segmentation on Wikipedia](https://en.wikipedia.org/wiki/Image_segmentation)
112
  - [OCR on Wikipedia](https://en.wikipedia.org/wiki/Optical_character_recognition)
113
- - [Transformer architecture on Wikipedia](https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture))
 
24
 
25
  ### What each vision model is
26
 
27
+ | Model | Model type | Why Koharu uses it |
28
+ | ---------------------------- | ---------------------- | ------------------------------------------------------- |
29
+ | `comic-text-bubble-detector` | object detector | finds text blocks and speech bubble regions in one pass |
30
+ | `comic-text-detector` | segmentation network | produces a text mask for cleanup |
31
+ | `PaddleOCR-VL-1.5` | vision-language model | reads cropped text into text tokens |
32
+ | `aot-inpainting` | inpainting network | reconstructs masked image regions after text removal |
33
+ | `YuzuMarker.FontDetection` | classifier / regressor | estimates font and style hints for rendering |
34
 
35
  The important design choice is that Koharu does not use one model for every page task. Detection, segmentation, OCR, and inpainting all need different output shapes:
36
 
 
54
 
55
  In practice, the local models are usually quantized decoder-only transformers. GGUF is the model format; `llama.cpp` is the inference runtime.
56
 
57
+ ### Translation-focused built-in local models for English output
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): around 8.5 GB in Q8_0 form, best when translation quality matters most
60
+ - [lfm2.5-1.2b-instruct](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Instruct-GGUF): a smaller multilingual instruct option for low-memory systems or faster iteration
61
+ - [sugoi-14b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-14B-Ultra-GGUF) and [sugoi-32b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-32B-Ultra-GGUF): larger translation-oriented choices when you want more headroom
62
 
63
+ ### Translation-focused built-in local models for Chinese output
64
 
65
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): a balanced choice for quality and speed on 8 GB class GPUs
66
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): a lighter option for mid-range or CPU-heavy setups
67
 
68
+ ### Translation-focused built-in local model for broader language coverage
69
 
70
+ - [hunyuan-mt-7b](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): a multi-language option with moderate hardware requirements
71
+
72
+ ### Other built-in local model families
73
+
74
+ The local picker also includes general-purpose families that are not translation-specific:
75
+
76
+ - Gemma 4 instruct: `gemma4-e2b-it`, `gemma4-e4b-it`, `gemma4-26b-a4b-it`, `gemma4-31b-it`
77
+ - Gemma 4 uncensored: `gemma4-e2b-uncensored`, `gemma4-e4b-uncensored`
78
+ - Qwen 3.5: `qwen3.5-0.8b`, `qwen3.5-2b`, `qwen3.5-4b`, `qwen3.5-9b`, `qwen3.5-27b`, `qwen3.5-35b-a3b`
79
+ - Qwen 3.5 uncensored: `qwen3.5-2b-uncensored`, `qwen3.5-4b-uncensored`, `qwen3.5-9b-uncensored`, `qwen3.5-27b-uncensored`, `qwen3.5-35b-a3b-uncensored`
80
 
81
  ## Remote providers
82
 
 
90
  - DeepSeek
91
  - OpenAI-compatible APIs such as LM Studio, OpenRouter, or any endpoint that exposes `/v1/models` and `/v1/chat/completions`
92
 
93
+ ### Current built-in remote models
94
+
95
+ The current built-in defaults for the provider picker are:
96
+
97
+ - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
98
+ - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
99
+ - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
100
+ - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-Chat`)
101
+ - OpenAI-compatible APIs: models are discovered dynamically from the configured endpoint
102
+
103
  Remote providers are configured in **Settings > API Keys**.
104
 
105
  For a step-by-step setup guide for LM Studio, OpenRouter, and similar endpoints, see [Use OpenAI-Compatible APIs](../how-to/use-openai-compatible-api.md).
 
130
  - [Fourier transform on Wikipedia](https://en.wikipedia.org/wiki/Fourier_transform)
131
  - [Image segmentation on Wikipedia](https://en.wikipedia.org/wiki/Image_segmentation)
132
  - [OCR on Wikipedia](https://en.wikipedia.org/wiki/Optical_character_recognition)
133
+ - [Transformer architecture on Wikipedia](<https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture)>)
docs/en-US/reference/http-api.md CHANGED
@@ -37,21 +37,21 @@ Frequently used response types include:
37
 
38
  ### Meta and fonts
39
 
40
- | Method | Path | Purpose |
41
- | --- | --- | --- |
42
- | `GET` | `/meta` | get app version and active ML backend |
43
- | `GET` | `/fonts` | list font families available for rendering |
44
 
45
  ### Documents
46
 
47
- | Method | Path | Purpose |
48
- | --- | --- | --- |
49
- | `GET` | `/documents` | list loaded documents |
50
- | `POST` | `/documents/import?mode=replace` | replace the current document set with uploaded images |
51
- | `POST` | `/documents/import?mode=append` | append uploaded images to the current document set |
52
- | `GET` | `/documents/{documentId}` | get one document and all text-block metadata |
53
- | `GET` | `/documents/{documentId}/thumbnail` | get a thumbnail image |
54
- | `GET` | `/documents/{documentId}/layers/{layer}` | fetch one image layer |
55
 
56
  The import endpoint uses multipart form data with repeated `files` fields.
57
 
@@ -65,16 +65,16 @@ Document layers currently exposed by the implementation include:
65
 
66
  ### Page pipeline
67
 
68
- | Method | Path | Purpose |
69
- | --- | --- | --- |
70
- | `POST` | `/documents/{documentId}/detect` | detect text blocks and layout |
71
- | `POST` | `/documents/{documentId}/ocr` | run OCR on detected text blocks |
72
- | `POST` | `/documents/{documentId}/inpaint` | remove original text using the current mask |
73
- | `POST` | `/documents/{documentId}/render` | render translated text |
74
- | `POST` | `/documents/{documentId}/translate` | generate translations for one block or the full page |
75
- | `PUT` | `/documents/{documentId}/mask-region` | replace or update part of the segmentation mask |
76
- | `PUT` | `/documents/{documentId}/brush-region` | write a patch into the brush layer |
77
- | `POST` | `/documents/{documentId}/inpaint-region` | re-inpaint a rectangular region only |
78
 
79
  Useful request details:
80
 
@@ -86,11 +86,11 @@ Useful request details:
86
 
87
  ## Text blocks
88
 
89
- | Method | Path | Purpose |
90
- | --- | --- | --- |
91
- | `POST` | `/documents/{documentId}/text-blocks` | create a new text block from `x`, `y`, `width`, `height` |
92
- | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | patch text, translation, box geometry, or style |
93
- | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | remove a text block |
94
 
95
  The text-block patch shape currently includes:
96
 
@@ -106,24 +106,24 @@ The text-block patch shape currently includes:
106
 
107
  ## Export
108
 
109
- | Method | Path | Purpose |
110
- | --- | --- | --- |
111
- | `GET` | `/documents/{documentId}/export?layer=rendered` | export one rendered image |
112
- | `GET` | `/documents/{documentId}/export?layer=inpainted` | export one inpainted image |
113
- | `GET` | `/documents/{documentId}/export/psd` | export one layered PSD |
114
- | `POST` | `/exports?layer=rendered` | export all rendered pages |
115
- | `POST` | `/exports?layer=inpainted` | export all inpainted pages |
116
 
117
  Single-document export endpoints return binary file content. Bulk export returns JSON with the number of files written.
118
 
119
  ## LLM control
120
 
121
- | Method | Path | Purpose |
122
- | --- | --- | --- |
123
- | `GET` | `/llm/catalog` | list the grouped local/provider LLM catalog |
124
- | `GET` | `/llm` | get the current LLM status |
125
- | `PUT` | `/llm` | load a local or provider-backed model target |
126
- | `DELETE` | `/llm` | unload the current model |
127
 
128
  Useful request details:
129
 
@@ -133,11 +133,13 @@ Useful request details:
133
 
134
  ## Provider configuration
135
 
136
- Provider settings now live under `GET /config` and `PUT /config`.
137
 
138
- - non-secret provider fields such as `baseUrl` are stored in `llm.providers`
139
- - provider reads expose `hasApiKey`, not the raw saved key
140
- - provider updates can set or clear API keys through `PUT /config`
 
 
141
 
142
  Current built-in provider ids include:
143
 
@@ -149,10 +151,10 @@ Current built-in provider ids include:
149
 
150
  ## Pipeline jobs
151
 
152
- | Method | Path | Purpose |
153
- | --- | --- | --- |
154
- | `POST` | `/jobs/pipeline` | start a full processing job |
155
- | `DELETE` | `/jobs/{jobId}` | cancel a running pipeline job |
156
 
157
  The pipeline job request can include:
158
 
 
37
 
38
  ### Meta and fonts
39
 
40
+ | Method | Path | Purpose |
41
+ | ------ | -------- | ------------------------------------------ |
42
+ | `GET` | `/meta` | get app version and active ML backend |
43
+ | `GET` | `/fonts` | list font families available for rendering |
44
 
45
  ### Documents
46
 
47
+ | Method | Path | Purpose |
48
+ | ------ | ---------------------------------------- | ----------------------------------------------------- |
49
+ | `GET` | `/documents` | list loaded documents |
50
+ | `POST` | `/documents/import?mode=replace` | replace the current document set with uploaded images |
51
+ | `POST` | `/documents/import?mode=append` | append uploaded images to the current document set |
52
+ | `GET` | `/documents/{documentId}` | get one document and all text-block metadata |
53
+ | `GET` | `/documents/{documentId}/thumbnail` | get a thumbnail image |
54
+ | `GET` | `/documents/{documentId}/layers/{layer}` | fetch one image layer |
55
 
56
  The import endpoint uses multipart form data with repeated `files` fields.
57
 
 
65
 
66
  ### Page pipeline
67
 
68
+ | Method | Path | Purpose |
69
+ | ------ | ---------------------------------------- | ---------------------------------------------------- |
70
+ | `POST` | `/documents/{documentId}/detect` | detect text blocks and layout |
71
+ | `POST` | `/documents/{documentId}/ocr` | run OCR on detected text blocks |
72
+ | `POST` | `/documents/{documentId}/inpaint` | remove original text using the current mask |
73
+ | `POST` | `/documents/{documentId}/render` | render translated text |
74
+ | `POST` | `/documents/{documentId}/translate` | generate translations for one block or the full page |
75
+ | `PUT` | `/documents/{documentId}/mask-region` | replace or update part of the segmentation mask |
76
+ | `PUT` | `/documents/{documentId}/brush-region` | write a patch into the brush layer |
77
+ | `POST` | `/documents/{documentId}/inpaint-region` | re-inpaint a rectangular region only |
78
 
79
  Useful request details:
80
 
 
86
 
87
  ## Text blocks
88
 
89
+ | Method | Path | Purpose |
90
+ | -------- | --------------------------------------------------- | -------------------------------------------------------- |
91
+ | `POST` | `/documents/{documentId}/text-blocks` | create a new text block from `x`, `y`, `width`, `height` |
92
+ | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | patch text, translation, box geometry, or style |
93
+ | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | remove a text block |
94
 
95
  The text-block patch shape currently includes:
96
 
 
106
 
107
  ## Export
108
 
109
+ | Method | Path | Purpose |
110
+ | ------ | ------------------------------------------------ | -------------------------- |
111
+ | `GET` | `/documents/{documentId}/export?layer=rendered` | export one rendered image |
112
+ | `GET` | `/documents/{documentId}/export?layer=inpainted` | export one inpainted image |
113
+ | `GET` | `/documents/{documentId}/export/psd` | export one layered PSD |
114
+ | `POST` | `/exports?layer=rendered` | export all rendered pages |
115
+ | `POST` | `/exports?layer=inpainted` | export all inpainted pages |
116
 
117
  Single-document export endpoints return binary file content. Bulk export returns JSON with the number of files written.
118
 
119
  ## LLM control
120
 
121
+ | Method | Path | Purpose |
122
+ | -------- | -------------- | -------------------------------------------- |
123
+ | `GET` | `/llm/catalog` | list the grouped local/provider LLM catalog |
124
+ | `GET` | `/llm` | get the current LLM status |
125
+ | `PUT` | `/llm` | load a local or provider-backed model target |
126
+ | `DELETE` | `/llm` | unload the current model |
127
 
128
  Useful request details:
129
 
 
133
 
134
  ## Provider configuration
135
 
136
+ Provider and runtime settings now live under `GET /config` and `PUT /config`.
137
 
138
+ - the config body currently includes top-level `data`, `http`, `pipeline`, and `providers`
139
+ - `providers` stores fields such as `id` and `base_url`
140
+ - saved provider API keys are returned as redacted placeholders rather than raw secrets
141
+ - `http { connect_timeout, read_timeout, max_retries }` controls the shared runtime HTTP client used for downloads and provider-backed requests
142
+ - `pipeline` stores the selected engine id for each pipeline stage
143
 
144
  Current built-in provider ids include:
145
 
 
151
 
152
  ## Pipeline jobs
153
 
154
+ | Method | Path | Purpose |
155
+ | -------- | ---------------- | ----------------------------- |
156
+ | `POST` | `/jobs/pipeline` | start a full processing job |
157
+ | `DELETE` | `/jobs/{jobId}` | cancel a running pipeline job |
158
 
159
  The pipeline job request can include:
160
 
docs/en-US/reference/index.md CHANGED
@@ -11,5 +11,5 @@ Reference pages collect factual details you may want to look up quickly while wo
11
  - [CLI Reference](cli.md): startup flags, local server behavior, and common runtime patterns
12
  - [HTTP API Reference](http-api.md): local REST endpoints, event stream names, payloads, and workflow order
13
  - [MCP Tools Reference](mcp-tools.md): built-in MCP tool names, parameters, and suggested usage flow
14
- - [Settings Reference](settings.md): appearance, language, provider keys, local-LLM presets, and About page behavior
15
  - [Keyboard Shortcuts](keyboard-shortcuts.md): the default editor shortcuts currently documented in the UI
 
11
  - [CLI Reference](cli.md): startup flags, local server behavior, and common runtime patterns
12
  - [HTTP API Reference](http-api.md): local REST endpoints, event stream names, payloads, and workflow order
13
  - [MCP Tools Reference](mcp-tools.md): built-in MCP tool names, parameters, and suggested usage flow
14
+ - [Settings Reference](settings.md): appearance, engine selection, provider keys, runtime config, and About page behavior
15
  - [Keyboard Shortcuts](keyboard-shortcuts.md): the default editor shortcuts currently documented in the UI
docs/en-US/reference/settings.md CHANGED
@@ -4,128 +4,82 @@ title: Settings Reference
4
 
5
  # Settings Reference
6
 
7
- Koharu's Settings screen exposes appearance, language, device, provider, and local-LLM configuration. This page documents the current settings surface as implemented in the app.
8
 
9
- ## Appearance
10
-
11
- Theme options:
12
-
13
- - `Light`
14
- - `Dark`
15
- - `System`
16
 
17
- The app applies the selected theme immediately through the frontend theme provider.
18
 
19
- ## Language
20
 
21
- The current UI locale list comes from the bundled translation resources.
22
 
23
- Currently shipped locales are:
 
 
24
 
25
- - `en-US`
26
- - `es-ES`
27
- - `ja-JP`
28
- - `ru-RU`
29
- - `zh-CN`
30
- - `zh-TW`
31
 
32
- Changing the UI language updates the frontend locale and also influences language-aware LLM model listing in the current implementation.
33
 
34
- ## Device
35
 
36
- The Settings screen shows the current ML compute backend as `ML Compute`.
 
 
 
 
 
 
 
37
 
38
- This value comes from the app metadata endpoint and reflects the runtime backend Koharu is currently using, such as CPU or a GPU-backed path.
39
 
40
  ## API Keys
41
 
42
- The current built-in provider key section covers:
43
 
44
  - `OpenAI`
45
  - `Gemini`
46
  - `Claude`
47
  - `DeepSeek`
 
48
 
49
- Important behavior:
50
-
51
- - API keys are stored through the local keyring integration rather than plain frontend storage
52
- - Gemini is marked as a free-tier provider in the current UI
53
- - the password-style input is only a visibility toggle in the UI, not a different storage mode
54
-
55
- ## Local LLM and OpenAI-compatible providers
56
-
57
- This section is used for local servers such as Ollama and LM Studio, and for custom OpenAI-compatible endpoints.
58
-
59
- ### Presets
60
-
61
- Current presets:
62
-
63
- - `Ollama`
64
- - `LM Studio`
65
- - `Preset 1`
66
- - `Preset 2`
67
-
68
- Default base URLs:
69
-
70
- - Ollama: `http://localhost:11434/v1`
71
- - LM Studio: `http://127.0.0.1:1234/v1`
72
- - Preset 1: empty until configured
73
- - Preset 2: empty until configured
74
-
75
- Each preset stores its own:
76
-
77
- - `Base URL`
78
- - `API Key`
79
- - `Model name`
80
- - `Temperature`
81
- - `Max tokens`
82
- - `Custom system prompt`
83
-
84
- That lets you keep several compatible backends configured and switch between them from the same settings screen.
85
-
86
- ### Required fields for the model picker
87
-
88
- In the current implementation, a preset-backed OpenAI-compatible model only becomes selectable when both of these are filled in:
89
-
90
- - `Base URL`
91
- - `Model name`
92
-
93
- An empty preset does not appear as a usable model entry.
94
-
95
- ### Advanced fields
96
-
97
- The expandable advanced section currently exposes:
98
-
99
- - `Temperature`
100
- - `Max tokens`
101
- - `Custom system prompt`
102
-
103
- Behavior notes:
104
 
105
- - leaving `Temperature` or `Max tokens` empty sends no override
106
- - leaving `Custom system prompt` empty uses Koharu's default manga translation system prompt
107
- - the reset button clears only the custom prompt override for the current preset
 
 
108
 
109
- ### Test Connection
110
 
111
- `Test Connection` is a connectivity check for the current preset.
112
 
113
- The current implementation:
114
 
115
- - sends a request to Koharu's `/llm/ping` path
116
- - checks the preset `Base URL`
117
- - optionally includes the preset API key
118
- - reports success or failure inline
119
- - shows model count and latency on success
120
- - uses a 5-second timeout for the underlying compatible-model listing
121
 
122
- This is a connectivity test, not a model load.
123
 
124
- ## About page
 
 
 
 
 
125
 
126
- Settings links to a separate About page.
127
 
128
- The About screen currently shows:
129
 
130
  - the current app version
131
  - whether a newer GitHub release exists
@@ -138,11 +92,11 @@ In packaged app mode, the version check compares the local app version against t
138
 
139
  The current settings behavior is split across storage layers:
140
 
 
141
  - provider API keys are stored through the system keyring
142
- - local LLM preset config is persisted in Koharu's frontend preferences store
143
- - theme and other UI preferences also persist locally
144
 
145
- That means clearing frontend preferences is not the same as clearing saved provider API keys.
146
 
147
  ## Related pages
148
 
 
4
 
5
  # Settings Reference
6
 
7
+ Koharu's Settings screen currently exposes five main areas:
8
 
9
+ - `Appearance`
10
+ - `Engines`
11
+ - `API Keys`
12
+ - `Runtime`
13
+ - `About`
 
 
14
 
15
+ This page documents the current settings surface as implemented in the app.
16
 
17
+ ## Appearance
18
 
19
+ The `Appearance` tab currently includes:
20
 
21
+ - theme: `Light`, `Dark`, or `System`
22
+ - UI language from the bundled translation list
23
+ - `Rendering Font`, which is used when Koharu renders translated text onto the page
24
 
25
+ Theme, language, and rendering-font changes apply immediately in the frontend.
 
 
 
 
 
26
 
27
+ ## Engines
28
 
29
+ The `Engines` tab selects the backend used for each pipeline stage:
30
 
31
+ - `Detector`
32
+ - `Bubble Detector`
33
+ - `Font Detector`
34
+ - `Segmenter`
35
+ - `OCR`
36
+ - `Translator`
37
+ - `Inpainter`
38
+ - `Renderer`
39
 
40
+ These values are stored in the shared app config and save immediately when changed.
41
 
42
  ## API Keys
43
 
44
+ The `API Keys` tab currently covers these built-in providers:
45
 
46
  - `OpenAI`
47
  - `Gemini`
48
  - `Claude`
49
  - `DeepSeek`
50
+ - `OpenAI Compatible`
51
 
52
+ Current behavior:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
+ - provider API keys are stored through the system keyring rather than plain text in `config.toml`
55
+ - provider base URLs are stored in the app config
56
+ - `OpenAI Compatible` requires a custom `Base URL`
57
+ - the app discovers models dynamically for `OpenAI Compatible` by querying the configured endpoint
58
+ - clearing a key removes it from the keyring
59
 
60
+ The API response intentionally redacts saved keys rather than returning the raw secret.
61
 
62
+ ## Runtime
63
 
64
+ The `Runtime` tab groups restart-required settings that affect the shared local runtime:
65
 
66
+ - `Data Path`
67
+ - `HTTP Connect Timeout`
68
+ - `HTTP Read Timeout`
69
+ - `HTTP Max Retries`
 
 
70
 
71
+ Current behavior:
72
 
73
+ - `Data Path` controls where Koharu stores runtime packages, downloaded models, page manifests, and image blobs
74
+ - `HTTP Connect Timeout` sets how long Koharu waits while establishing HTTP connections
75
+ - `HTTP Read Timeout` sets how long Koharu waits while reading HTTP responses
76
+ - `HTTP Max Retries` controls automatic retries for transient HTTP failures
77
+ - these HTTP values are used by the shared runtime HTTP client for downloads and provider-backed requests
78
+ - applying changes saves the config and restarts the desktop app because the runtime client is built at startup
79
 
80
+ ## About
81
 
82
+ The `About` tab currently shows:
83
 
84
  - the current app version
85
  - whether a newer GitHub release exists
 
92
 
93
  The current settings behavior is split across storage layers:
94
 
95
+ - `config.toml` stores shared app config such as `data`, `http`, `pipeline`, and provider `baseUrl`
96
  - provider API keys are stored through the system keyring
97
+ - theme, language, and rendering-font preferences are stored in the frontend preferences layer
 
98
 
99
+ That means clearing frontend preferences is not the same as clearing saved provider API keys or shared runtime config.
100
 
101
  ## Related pages
102
 
docs/en-US/tutorials/translate-your-first-page.md CHANGED
@@ -80,6 +80,7 @@ Koharu helps with text layout and vertical CJK rendering, but the final page sti
80
  - tone and character voice
81
  - line breaks and bubble fit
82
  - font choice and stroke readability
 
83
  - blocks whose source OCR looked uncertain
84
 
85
  If a translation reads correctly but still looks cramped, adjust the text block or styling before exporting.
 
80
  - tone and character voice
81
  - line breaks and bubble fit
82
  - font choice and stroke readability
83
+ Koharu's default stroke choice now auto-picks a black or white outline for contrast, but you can still override it manually when the page needs something else.
84
  - blocks whose source OCR looked uncertain
85
 
86
  If a translation reads correctly but still looks cramped, adjust the text block or styling before exporting.
docs/ja-JP/explanation/models-and-providers.md CHANGED
@@ -24,13 +24,13 @@ Koharu は、必要な vision モデルを初回利用時に自動でダウン
24
 
25
  ### 各 vision モデルの役割
26
 
27
- | モデル | モデル種別 | Koharu で使う理由 |
28
- | --- | --- | --- |
29
- | `comic-text-bubble-detector` | object detector | テキストブロックと吹き出し領域を 1 回で見つける |
30
- | `comic-text-detector` | segmentation network | クリーンアップ用の text mask を作る |
31
- | `PaddleOCR-VL-1.5` | vision-language model | 切り出したテキストを文字列へ読む |
32
- | `aot-inpainting` | inpainting network | 文字除去後の masked 領域を補完する |
33
- | `YuzuMarker.FontDetection` | classifier / regressor | レンダリング用のフォントやスタイルのヒントを推定する |
34
 
35
  重要なのは、Koharu がページ上の全作業を 1 つのモデルに任せていないことです。検出、segmentation、OCR、inpainting はそれぞれ欲しい出力が異なります。
36
 
@@ -54,19 +54,29 @@ Koharu は [llama.cpp](https://github.com/ggml-org/llama.cpp) を通じてロー
54
 
55
  実際には、ローカルモデルの多くは量子化済みの decoder-only transformer です。GGUF はファイル形式であり、`llama.cpp` は推論ランタイムです。
56
 
57
- ### 英語出力向けに勧められるローカルモデル
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): Q8_0 で約 8.5 GB。翻訳品質を優先するなら有力
60
- - [lfm2-350m-enjp-mt](https://huggingface.co/LiquidAI/LFM2-350M-ENJP-MT-GGUF): 非常に小さく、低メモリ環境や高速プレビュー
 
61
 
62
- ### 中国語出力向けに勧められるローカルモデル
63
 
64
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): 品質と速度のバランスが良く、8 GB クラス GPU に向く
65
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): 中堅 GPU や CPU 寄り構成向けの軽量モデル
66
 
67
- ### より広い言語対応向けのローカルモデル
68
 
69
- - [hunyuan-7b-mt-v1.0](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): 中程度のハードウェア要件で使える多言語モデル
 
 
 
 
 
 
 
 
 
70
 
71
  ## リモートプロバイダ
72
 
@@ -80,6 +90,16 @@ Koharu は、ローカルモデルをダウンロードせずに、リモート
80
  - DeepSeek
81
  - LM Studio、OpenRouter、または `/v1/models` と `/v1/chat/completions` を公開する任意のエンドポイントなどの OpenAI 互換 API
82
 
 
 
 
 
 
 
 
 
 
 
83
  リモートプロバイダは **Settings > API Keys** で設定します。
84
 
85
  LM Studio、OpenRouter、類似エンドポイントの具体的な設定手順は [OpenAI 互換 API を使う](../how-to/use-openai-compatible-api.md) を参照してください。
@@ -110,4 +130,4 @@ LM Studio、OpenRouter、類似エンドポイントの具体的な設定手順
110
  - [Wikipedia の Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform)
111
  - [Wikipedia の Image segmentation](https://en.wikipedia.org/wiki/Image_segmentation)
112
  - [Wikipedia の OCR](https://en.wikipedia.org/wiki/Optical_character_recognition)
113
- - [Wikipedia の Transformer architecture](https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture))
 
24
 
25
  ### 各 vision モデルの役割
26
 
27
+ | モデル | モデル種別 | Koharu で使う理由 |
28
+ | ---------------------------- | ---------------------- | ---------------------------------------------------- |
29
+ | `comic-text-bubble-detector` | object detector | テキストブロックと吹き出し領域を 1 回で見つける |
30
+ | `comic-text-detector` | segmentation network | クリーンアップ用の text mask を作る |
31
+ | `PaddleOCR-VL-1.5` | vision-language model | 切り出したテキストを文字列へ読む |
32
+ | `aot-inpainting` | inpainting network | 文字除去後の masked 領域を補完する |
33
+ | `YuzuMarker.FontDetection` | classifier / regressor | レンダリング用のフォントやスタイルのヒントを推定する |
34
 
35
  重要なのは、Koharu がページ上の全作業を 1 つのモデルに任せていないことです。検出、segmentation、OCR、inpainting はそれぞれ欲しい出力が異なります。
36
 
 
54
 
55
  実際には、ローカルモデルの多くは量子化済みの decoder-only transformer です。GGUF はファイル形式であり、`llama.cpp` は推論ランタイムです。
56
 
57
+ ### 英語出力向けの翻訳特化組み込みローカルモデル
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf): Q8_0 で約 8.5 GB。翻訳品質を優先するなら有力
60
+ - [lfm2.5-1.2b-instruct](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Instruct-GGUF): 低メモリ環境や高速な試行にく小型の多言語 instruction モデル
61
+ - [sugoi-14b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-14B-Ultra-GGUF) と [sugoi-32b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-32B-Ultra-GGUF): より多くの VRAM / RAM を使える環境向けの大型翻訳寄りモデル
62
 
63
+ ### 中国語出力向けの翻訳特化組み込みローカルモデル
64
 
65
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7): 品質と速度のバランスが良く、8 GB クラス GPU に向く
66
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX): 中堅 GPU や CPU 寄り構成向けの軽量モデル
67
 
68
+ ### より広い言語対応向けの翻訳特化組み込みローカルモデル
69
 
70
+ - [hunyuan-mt-7b](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF): 中程度のハードウェア要件で使える多言語モデル
71
+
72
+ ### その他の組み込みローカルモデルファミリ
73
+
74
+ LLM ピッカーには、翻訳専用ではない汎用ファミリも含まれています。
75
+
76
+ - Gemma 4 instruct: `gemma4-e2b-it`, `gemma4-e4b-it`, `gemma4-26b-a4b-it`, `gemma4-31b-it`
77
+ - Gemma 4 uncensored: `gemma4-e2b-uncensored`, `gemma4-e4b-uncensored`
78
+ - Qwen 3.5: `qwen3.5-0.8b`, `qwen3.5-2b`, `qwen3.5-4b`, `qwen3.5-9b`, `qwen3.5-27b`, `qwen3.5-35b-a3b`
79
+ - Qwen 3.5 uncensored: `qwen3.5-2b-uncensored`, `qwen3.5-4b-uncensored`, `qwen3.5-9b-uncensored`, `qwen3.5-27b-uncensored`, `qwen3.5-35b-a3b-uncensored`
80
 
81
  ## リモートプロバイダ
82
 
 
90
  - DeepSeek
91
  - LM Studio、OpenRouter、または `/v1/models` と `/v1/chat/completions` を公開する任意のエンドポイントなどの OpenAI 互換 API
92
 
93
+ ### 現在の組み込みリモートモデル
94
+
95
+ 現在、プロバイダ選択で最初から表示される組み込みモデルは次の通りです。
96
+
97
+ - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
98
+ - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
99
+ - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
100
+ - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-Chat`)
101
+ - OpenAI 互換 API: モデル一覧は設定したエンドポイントから動的に取得されます
102
+
103
  リモートプロバイダは **Settings > API Keys** で設定します。
104
 
105
  LM Studio、OpenRouter、類似エンドポイントの具体的な設定手順は [OpenAI 互換 API を使う](../how-to/use-openai-compatible-api.md) を参照してください。
 
130
  - [Wikipedia の Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform)
131
  - [Wikipedia の Image segmentation](https://en.wikipedia.org/wiki/Image_segmentation)
132
  - [Wikipedia の OCR](https://en.wikipedia.org/wiki/Optical_character_recognition)
133
+ - [Wikipedia の Transformer architecture](<https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture)>)
docs/ja-JP/reference/http-api.md CHANGED
@@ -37,21 +37,21 @@ http://127.0.0.1:<PORT>/api/v1
37
 
38
  ### Meta とフォント
39
 
40
- | Method | Path | 目的 |
41
- | --- | --- | --- |
42
- | `GET` | `/meta` | アプリバージョンと有効な ML バックエンドを取得する |
43
- | `GET` | `/fonts` | レンダリングに使える font family を一覧する |
44
 
45
  ### Documents
46
 
47
- | Method | Path | 目的 |
48
- | --- | --- | --- |
49
- | `GET` | `/documents` | 読み込み済みドキュメント一覧を取得する |
50
- | `POST` | `/documents/import?mode=replace` | アップロード画像で現在のドキュメント集合を置き換える |
51
- | `POST` | `/documents/import?mode=append` | アップロード画像を現在のドキュメント集合に追加する |
52
- | `GET` | `/documents/{documentId}` | 1 件のドキュメントと全 text-block 情報を取得する |
53
- | `GET` | `/documents/{documentId}/thumbnail` | サムネイル画像を取得する |
54
- | `GET` | `/documents/{documentId}/layers/{layer}` | 1 つの画像レイヤーを取得する |
55
 
56
  import エンドポイントは、`files` フィールドを繰り返し持つ multipart form data を使います。
57
 
@@ -65,16 +65,16 @@ import エンドポイントは、`files` フィールドを繰り返し持つ m
65
 
66
  ### ページパイプライン
67
 
68
- | Method | Path | 目的 |
69
- | --- | --- | --- |
70
- | `POST` | `/documents/{documentId}/detect` | テキストブロックとレイアウトを検出する |
71
- | `POST` | `/documents/{documentId}/ocr` | 検出済み text block に OCR をかける |
72
- | `POST` | `/documents/{documentId}/inpaint` | 現在の mask を使って元文字を除去する |
73
- | `POST` | `/documents/{documentId}/render` | 翻訳済みテキストを描画する |
74
- | `POST` | `/documents/{documentId}/translate` | 1 ブロックまたはページ全体を翻訳する |
75
- | `PUT` | `/documents/{documentId}/mask-region` | segmentation mask の一部を置換または更新する |
76
- | `PUT` | `/documents/{documentId}/brush-region` | brush layer に patch を書き込む |
77
- | `POST` | `/documents/{documentId}/inpaint-region` | 矩形領域だけを再 inpaint する |
78
 
79
  実用上のリクエスト詳細:
80
 
@@ -86,11 +86,11 @@ import エンドポイントは、`files` フィールドを繰り返し持つ m
86
 
87
  ## Text blocks
88
 
89
- | Method | Path | 目的 |
90
- | --- | --- | --- |
91
- | `POST` | `/documents/{documentId}/text-blocks` | `x`, `y`, `width`, `height` から新しい text block を作る |
92
- | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | テキスト、翻訳、box geometry、style を patch する |
93
- | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | text block を��除する |
94
 
95
  現在の text-block patch には次の項目があります。
96
 
@@ -106,24 +106,24 @@ import エンドポイントは、`files` フィールドを繰り返し持つ m
106
 
107
  ## Export
108
 
109
- | Method | Path | 目的 |
110
- | --- | --- | --- |
111
- | `GET` | `/documents/{documentId}/export?layer=rendered` | rendered image を 1 件書き出す |
112
- | `GET` | `/documents/{documentId}/export?layer=inpainted` | inpainted image を 1 件書き出す |
113
- | `GET` | `/documents/{documentId}/export/psd` | レイヤー付き PSD を 1 件書き出す |
114
- | `POST` | `/exports?layer=rendered` | 全 rendered ページを書き出す |
115
- | `POST` | `/exports?layer=inpainted` | 全 inpainted ページを書き出す |
116
 
117
  単一ドキュメント用 export エンドポイントはバイナリファイル内容を返します。一括 export は、書き出した件数を含む JSON を返します。
118
 
119
  ## LLM 制御
120
 
121
- | Method | Path | 目的 |
122
- | --- | --- | --- |
123
- | `GET` | `/llm/catalog` | ローカル/プロバイダ別に整理された LLM カタログを取得する |
124
- | `GET` | `/llm` | 現在の LLM 状態を取得する |
125
- | `PUT` | `/llm` | ローカルまたはプロバイダ target を読み込む |
126
- | `DELETE` | `/llm` | 現在のモデルをアンロードする |
127
 
128
  実用上のリクエスト詳細:
129
 
@@ -133,11 +133,13 @@ import エンドポイントは、`files` フィールドを繰り返し持つ m
133
 
134
  ## プロバイダ設定
135
 
136
- プロバイダ設定は `GET /config` と `PUT /config` に統合されました
137
 
138
- - `llm.providers` に `baseUrl` などの非シークレット設定保存します
139
- - 読み出しで生の API キーは返さず、`hasApiKey` のみ返します
140
- - API キーの設定/削除も `PUT /config` 行います
 
 
141
 
142
  現在の組み込み provider id は次です。
143
 
@@ -149,10 +151,10 @@ import エンドポイントは、`files` フィールドを繰り返し持つ m
149
 
150
  ## パイプライン job
151
 
152
- | Method | Path | 目的 |
153
- | --- | --- | --- |
154
- | `POST` | `/jobs/pipeline` | フル処理 job を開始する |
155
- | `DELETE` | `/jobs/{jobId}` | 行中の pipeline job をキャンセルする |
156
 
157
  pipeline job リクエストには次を含められます。
158
 
@@ -187,7 +189,7 @@ GET /events
187
  1. `POST /documents/import?mode=replace`
188
  2. `POST /documents/{documentId}/detect`
189
  3. `POST /documents/{documentId}/ocr`
190
- 4. `POST /llm/load`
191
  5. `POST /documents/{documentId}/translate`
192
  6. `POST /documents/{documentId}/inpaint`
193
  7. `POST /documents/{documentId}/render`
 
37
 
38
  ### Meta とフォント
39
 
40
+ | Method | Path | 目的 |
41
+ | ------ | -------- | -------------------------------------------------- |
42
+ | `GET` | `/meta` | アプリバージョンと有効な ML バックエンドを取得する |
43
+ | `GET` | `/fonts` | レンダリングに使える font family を一覧する |
44
 
45
  ### Documents
46
 
47
+ | Method | Path | 目的 |
48
+ | ------ | ---------------------------------------- | ---------------------------------------------------- |
49
+ | `GET` | `/documents` | 読み込み済みドキュメント一覧を取得する |
50
+ | `POST` | `/documents/import?mode=replace` | アップロード画像で現在のドキュメント集合を置き換える |
51
+ | `POST` | `/documents/import?mode=append` | アップロード画像を現在のドキュメント集合に追加する |
52
+ | `GET` | `/documents/{documentId}` | 1 件のドキュメントと全 text-block 情報を取得する |
53
+ | `GET` | `/documents/{documentId}/thumbnail` | サムネイル画像を取得する |
54
+ | `GET` | `/documents/{documentId}/layers/{layer}` | 1 つの画像レイヤーを取得する |
55
 
56
  import エンドポイントは、`files` フィールドを繰り返し持つ multipart form data を使います。
57
 
 
65
 
66
  ### ページパイプライン
67
 
68
+ | Method | Path | 目的 |
69
+ | ------ | ---------------------------------------- | -------------------------------------------- |
70
+ | `POST` | `/documents/{documentId}/detect` | テキストブロックとレイアウトを検出する |
71
+ | `POST` | `/documents/{documentId}/ocr` | 検出済み text block に OCR をかける |
72
+ | `POST` | `/documents/{documentId}/inpaint` | 現在の mask を使って元文字を除去する |
73
+ | `POST` | `/documents/{documentId}/render` | 翻訳済みテキストを描画する |
74
+ | `POST` | `/documents/{documentId}/translate` | 1 ブロックまたはページ全体を翻訳する |
75
+ | `PUT` | `/documents/{documentId}/mask-region` | segmentation mask の一部を置換または更新する |
76
+ | `PUT` | `/documents/{documentId}/brush-region` | brush layer に patch を書き込む |
77
+ | `POST` | `/documents/{documentId}/inpaint-region` | 矩形領域だけを再 inpaint する |
78
 
79
  実用上のリクエスト詳細:
80
 
 
86
 
87
  ## Text blocks
88
 
89
+ | Method | Path | 目的 |
90
+ | -------- | --------------------------------------------------- | -------------------------------------------------------- |
91
+ | `POST` | `/documents/{documentId}/text-blocks` | `x`, `y`, `width`, `height` から新しい text block を作る |
92
+ | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | テキスト、翻訳、box geometry、style を patch する |
93
+ | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | text block を除する |
94
 
95
  現在の text-block patch には次の項目があります。
96
 
 
106
 
107
  ## Export
108
 
109
+ | Method | Path | 目的 |
110
+ | ------ | ------------------------------------------------ | -------------------------------- |
111
+ | `GET` | `/documents/{documentId}/export?layer=rendered` | rendered image を 1 件書き出す |
112
+ | `GET` | `/documents/{documentId}/export?layer=inpainted` | inpainted image を 1 件書き出す |
113
+ | `GET` | `/documents/{documentId}/export/psd` | レイヤー付き PSD を 1 件書き出す |
114
+ | `POST` | `/exports?layer=rendered` | 全 rendered ページを書き出す |
115
+ | `POST` | `/exports?layer=inpainted` | 全 inpainted ページを書き出す |
116
 
117
  単一ドキュメント用 export エンドポイントはバイナリファイル内容を返します。一括 export は、書き出した件数を含む JSON を返します。
118
 
119
  ## LLM 制御
120
 
121
+ | Method | Path | 目的 |
122
+ | -------- | -------------- | -------------------------------------------------------- |
123
+ | `GET` | `/llm/catalog` | ローカル/プロバイダ別に整理された LLM カタログを取得する |
124
+ | `GET` | `/llm` | 現在の LLM 状態を取得する |
125
+ | `PUT` | `/llm` | ローカルまたはプロバイダ target を読み込む |
126
+ | `DELETE` | `/llm` | 現在のモデルをアンロードする |
127
 
128
  実用上のリクエスト詳細:
129
 
 
133
 
134
  ## プロバイダ設定
135
 
136
+ プロバイダ設定とランタイム設定は `GET /config` と `PUT /config` に統合されてい
137
 
138
+ - 現在の config ボディはトップレベルに `data`、`http`、`pipeline`、`providers`持ちます
139
+ - `providers` に`id` `base_url` など値を保存します
140
+ - 保存済み API キーは生値はなく、マスク済みプレースホルダとして返されます
141
+ - `http { connect_timeout, read_timeout, max_retries }` はダウンロードや provider リクエストに使う共有ランタイム HTTP クライアントを制御します
142
+ - `pipeline` には各パイプライン段階で選ばれた engine id が保存されます
143
 
144
  現在の組み込み provider id は次です。
145
 
 
151
 
152
  ## パイプライン job
153
 
154
+ | Method | Path | 目的 |
155
+ | -------- | ---------------- | -------------------------------------- |
156
+ | `POST` | `/jobs/pipeline` | フル処理 job を開始する |
157
+ | `DELETE` | `/jobs/{jobId}` | ��行中の pipeline job をキャンセルする |
158
 
159
  pipeline job リクエストには次を含められます。
160
 
 
189
  1. `POST /documents/import?mode=replace`
190
  2. `POST /documents/{documentId}/detect`
191
  3. `POST /documents/{documentId}/ocr`
192
+ 4. `PUT /llm`
193
  5. `POST /documents/{documentId}/translate`
194
  6. `POST /documents/{documentId}/inpaint`
195
  7. `POST /documents/{documentId}/render`
docs/ja-JP/reference/index.md CHANGED
@@ -11,5 +11,5 @@ title: リファレンス
11
  - [CLI リファレンス](cli.md): 起動フラグ、ローカルサーバーの挙動、よくある実行パターン
12
  - [HTTP API リファレンス](http-api.md): ローカル REST エンドポイント、イベントストリーム名、ペイロード、処理順序
13
  - [MCP ツールリファレンス](mcp-tools.md): 組み込み MCP ツール名、引数、推奨される利用フロー
14
- - [設定リファレンス](settings.md): 外観、言語、プロバイダ API キー、ローカル LLM プリセット、About ページの挙動
15
  - [キーボードショートカット](keyboard-shortcuts.md): 現在 UI に記載されている既定の編集ショートカット
 
11
  - [CLI リファレンス](cli.md): 起動フラグ、ローカルサーバーの挙動、よくある実行パターン
12
  - [HTTP API リファレンス](http-api.md): ローカル REST エンドポイント、イベントストリーム名、ペイロード、処理順序
13
  - [MCP ツールリファレンス](mcp-tools.md): 組み込み MCP ツール名、引数、推奨される利用フロー
14
+ - [設定リファレンス](settings.md): 外観、エンジン選択、プロバイダ API キー、Runtime 設定、About ページの挙動
15
  - [キーボードショートカット](keyboard-shortcuts.md): 現在 UI に記載されている既定の編集ショートカット
docs/ja-JP/reference/settings.md CHANGED
@@ -4,145 +4,99 @@ title: 設定リファレンス
4
 
5
  # 設定リファレンス
6
 
7
- Koharu の設定画面は、外観、言語、デバイス、プロバイダ、ローカル LLM の設定を扱えます。このページは、現在アプリに実装されている設定項目をとめます。
8
 
9
- ## 外観
 
 
 
 
10
 
11
- 選択肢:
12
 
13
- - `Light`
14
- - `Dark`
15
- - `System`
16
 
17
- アプリは選択したテーマをフロントエンドのテーマプロバイダ経由で即座反映します。
18
 
19
- ## 言語
 
 
20
 
21
- 現在の UI ロケル一覧は同梱されている翻訳リソースから読み込れます。
22
 
23
- 現在同梱されているロケール:
24
 
25
- - `en-US`
26
- - `es-ES`
27
- - `ja-JP`
28
- - `ru-RU`
29
- - `zh-CN`
30
- - `zh-TW`
31
 
32
- UI 言語を変更すると、フロントエンドのロケールが更新され、現在の実装では言語に応じた LLM モデル一覧にも影響します。
 
 
 
 
 
 
 
33
 
34
- ## デバイス
35
 
36
- 設定画面には、現在の ML 計算バックエンドが `ML Compute` として表示されます。
37
 
38
- この値はアプリのメタデータエンドポイントから取得され、CPU GPU バックエンドなど、Koharu が実際に使っているランタイム経路を反映します。
39
-
40
- ## API キー
41
-
42
- 現在の組み込みプロバイダのキー設定対象:
43
 
44
  - `OpenAI`
45
  - `Gemini`
46
  - `Claude`
47
  - `DeepSeek`
 
48
 
49
- 重要な挙動:
50
-
51
- - API キーは単純なフロントエンド保存ではなく、ローカルの keyring 連携を通じて保存されます
52
- - 現在の UI では Gemini は無料枠プロバイダとして表示されます
53
- - パスワード風の入力欄は UI 上の表示切り替えであり、別の保存方式ではありません
54
-
55
- ## ローカル LLM と OpenAI 互換プロバイダ
56
-
57
- このセクションは、Ollama や LM Studio のようなローカルサーバーや、独自の OpenAI 互換エンドポイントに使います。
58
-
59
- ### プリセット
60
-
61
- 現在のプリセット:
62
-
63
- - `Ollama`
64
- - `LM Studio`
65
- - `Preset 1`
66
- - `Preset 2`
67
-
68
- 既定の Base URL:
69
-
70
- - Ollama: `http://localhost:11434/v1`
71
- - LM Studio: `http://127.0.0.1:1234/v1`
72
- - Preset 1: empty until configured
73
- - Preset 2: empty until configured
74
-
75
- 各プリセットごとに次を保持します。
76
-
77
- - `Base URL`
78
- - `API Key`
79
- - `Model name`
80
- - `Temperature`
81
- - `Max tokens`
82
- - `Custom system prompt`
83
-
84
- これにより、複数の互換バックエンドを同時に設定し、同じ設定画面から切り替えられます。
85
-
86
- ### モデルピッカーに必要な項目
87
-
88
- 現在の実装では、プリセット経由の OpenAI 互換モデルは次の両方が埋まっている場合にのみ選択可能になります。
89
-
90
- - `Base URL`
91
- - `Model name`
92
-
93
- 空のプリセットは利用可能なモデル項目として表示されません。
94
-
95
- ### 詳細項目
96
-
97
- 展開可能な詳細セクションで現在設定できる項目:
98
-
99
- - `Temperature`
100
- - `Max tokens`
101
- - `Custom system prompt`
102
-
103
- 挙動メモ:
104
 
105
- - `Temperature` `Max tokens` を空にすると、上書き値送信されません
106
- - `Custom system prompt` を空にすると、Koharu の既定の漫画翻訳用システムロンプトが使われます
107
- - リセットボタン現在のプリセットに対するカスタムプロンプト上書きのみを消去しま
 
 
108
 
109
- ### Test Connection
110
 
111
- `Test Connection` は、現在のプリセットに対する接続確認です。
112
 
113
- 現在実装:
114
 
115
- - sends a request to Koharu's `/llm/ping` path
116
- - checks the preset `Base URL`
117
- - optionally includes the preset API key
118
- - reports success or failure inline
119
- - shows model count and latency on success
120
- - uses a 5-second timeout for the underlying compatible-model listing
121
 
122
- これは接続テストであり、モデル読み込みではありません。
123
 
124
- ## About ページ
 
 
 
 
 
125
 
126
- 設定画面からは別の About ページに移動できます。
127
 
128
- About 画面には現在次が表示されます。
129
 
130
- - the current app version
131
- - whether a newer GitHub release exists
132
- - the author link
133
- - the repository link
134
 
135
- パッケージ済みアプリでは、バージョン確認はローカルのアプリ版と `mayocream/koharu` の最新 GitHub リリースを比較します。
136
 
137
  ## 永続化の仕組み
138
 
139
  現在の設定保存は複数の層に分かれています。
140
 
141
- - provider API keys are stored through the system keyring
142
- - local LLM preset config is persisted in Koharu's frontend preferences store
143
- - theme and other UI preferences also persist locally
144
 
145
- つまり、フロントエンド設定を消しても、保存済みのプロバイダ API キーまで消えるわけではありません。
146
 
147
  ## 関連ページ
148
 
 
4
 
5
  # 設定リファレンス
6
 
7
+ 現在の Koharu の Settings 画面は、主に次の 5 セクション構成されています。
8
 
9
+ - `Appearance`
10
+ - `Engines`
11
+ - `API Keys`
12
+ - `Runtime`
13
+ - `About`
14
 
15
+ このペジでは、現在アプリ実装に基づく設定項目をまとめます。
16
 
17
+ ## Appearance
 
 
18
 
19
+ `Appearance` タブは現在次が含れます。
20
 
21
+ - テーマ: `Light` / `Dark` / `System`
22
+ - 同梱済み翻訳リソースから選ぶ UI 言語
23
+ - 翻訳テキスト描画に使う `Rendering Font`
24
 
25
+ 言語、描画フォントの変更はフロントエンド側で即時反映されます。
26
 
27
+ ## Engines
28
 
29
+ `Engines` タブでは、各パイプライン段階で使うバックエンドを選択します。
 
 
 
 
 
30
 
31
+ - `Detector`
32
+ - `Bubble Detector`
33
+ - `Font Detector`
34
+ - `Segmenter`
35
+ - `OCR`
36
+ - `Translator`
37
+ - `Inpainter`
38
+ - `Renderer`
39
 
40
+ これらの値は共有アプリ設定に保存され、変更時に即時保存されます。
41
 
42
+ ## API Keys
43
 
44
+ `API Keys` タブで現在扱う組み込み provider は次の通りです。
 
 
 
 
45
 
46
  - `OpenAI`
47
  - `Gemini`
48
  - `Claude`
49
  - `DeepSeek`
50
+ - `OpenAI Compatible`
51
 
52
+ 現在の挙動:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
+ - provider API キーは `config.toml` なくシステム keyring に保存されま
55
+ - provider `Base URL` は共有アリ設定に保存されます
56
+ - `OpenAI Compatible` ではカスタム `Base URL` が必須で
57
+ - `OpenAI Compatible` のモデル一覧は設定済みエンドポイントへの問い合わせで動的取得されます
58
+ - キーをクリアすると keyring から削除されます
59
 
60
+ API レスポンスでは保存済みキーは生値ではなく、マスク済みの値として返されます。
61
 
62
+ ## Runtime
63
 
64
+ `Runtime` タブ���は、共有ローカルランタイムに影響する再起動必須設定をまとめています。
65
 
66
+ - `Data Path`
67
+ - `HTTP Connect Timeout`
68
+ - `HTTP Read Timeout`
69
+ - `HTTP Max Retries`
 
 
70
 
71
+ 現在の挙動:
72
 
73
+ - `Data Path` はランタイムパッケージ、ダウンロード済みモデル、ページマニフェスト、画像 blob の保存先です
74
+ - `HTTP Connect Timeout` は HTTP 接続確立の待機時間です
75
+ - `HTTP Read Timeout` は HTTP レスポンス読み取りの待機時間です
76
+ - `HTTP Max Retries` は一時的な HTTP 障害への自動再試行回数です
77
+ - これらの HTTP 値はダウンロードや provider リクエストに使う共有ランタイム HTTP クライアントに適用されます
78
+ - これらの値は起動時に読み込まれるため、適用時は設定保存後にデスクトップアプリを再起動します
79
 
80
+ ## About
81
 
82
+ `About` タブには現在次が表示されます。
83
 
84
+ - 現在のアプリバージョン
85
+ - より新しい GitHub リリースの有無
86
+ - 作者リンク
87
+ - リポジトリリンク
88
 
89
+ パッケージ済みアプリでは、`mayocream/koharu` の最新 GitHub リリースとローカル版を比較して更新状態を判定します。
90
 
91
  ## 永続化の仕組み
92
 
93
  現在の設定保存は複数の層に分かれています。
94
 
95
+ - `config.toml` には `data`、`http`、`pipeline`、provider `baseUrl` など共有設定が保存されます
96
+ - provider API キーはシステム keyring に保存されます
97
+ - テーマ、言語、描画フォントはフロントエンドの preferences 層に保存されます
98
 
99
+ つまり、フロントエンドの preferences を消しても、保存済みの provider API キーや共有ランタイム設定まで消えません。
100
 
101
  ## 関連ページ
102
 
docs/ja-JP/tutorials/translate-your-first-page.md CHANGED
@@ -80,6 +80,7 @@ Koharu はテキストレイアウトや縦書き CJK レンダリングを補
80
  - 口調やキャラクターの声
81
  - 改行位置と吹き出しへの収まり
82
  - フォント選択と縁取りの読みやすさ
 
83
  - 元の OCR が不安定だったブロック
84
 
85
  翻訳文として正しくても見た目が窮屈なら、書き出す前にテキストブロックやスタイルを調整してください。
 
80
  - 口調やキャラクターの声
81
  - 改行位置と吹き出しへの収まり
82
  - フォント選択と縁取りの読みやすさ
83
+ 現在の既定の縁取り色は、コントラストを取るため自動で白か黒を選びます。必要なら手動で上書きできます。
84
  - 元の OCR が不安定だったブロック
85
 
86
  翻訳文として正しくても見た目が窮屈なら、書き出す前にテキストブロックやスタイルを調整してください。
docs/zh-CN/explanation/models-and-providers.md CHANGED
@@ -24,13 +24,13 @@ Koharu 会在首次使用时自动下载所需的视觉模型。
24
 
25
  ### 每个视觉模型是什么
26
 
27
- | 模型 | 模型类型 | Koharu 使用它的原因 |
28
- | --- | --- | --- |
29
  | `comic-text-bubble-detector` | object detector | 一次推理同时找出文本块和气泡区域 |
30
- | `comic-text-detector` | 分割网络 | 生成清理用的文本掩码 |
31
- | `PaddleOCR-VL-1.5` | 视觉语言模型 | 把裁剪图像读成文本 token |
32
- | `aot-inpainting` | 修复网络 | 在去字后补全被掩码覆盖的区域 |
33
- | `YuzuMarker.FontDetection` | 分类 / 回归模型 | 为渲染估计字体与风格提示 |
34
 
35
  最重要的设计点是:Koharu 不会用一个模型硬扛所有页面任务。检测、分割、OCR 和修复需要完全不同的输出形式:
36
 
@@ -54,19 +54,29 @@ Koharu 通过 [llama.cpp](https://github.com/ggml-org/llama.cpp) 支持本地 GG
54
 
55
  在实践中,这些本地模型通常是量化后的 decoder-only transformer。GGUF 是文件格式,`llama.cpp` 是推理运行时。
56
 
57
- ### 面向英文输出的建议本地模型
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf):Q8_0 约 8.5 GB,更适合追求翻译质量
60
- - [lfm2-350m-enjp-mt](https://huggingface.co/LiquidAI/LFM2-350M-ENJP-MT-GGUF):体积很小,适合低内存机器或快速预览
 
61
 
62
- ### 面向中文输出的建议本地模型
63
 
64
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7):在 8 GB 级别显卡上兼顾质量与速度
65
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX):更轻、更快,适合中端显卡或偏 CPU 的环境
66
 
67
- ### 面向更广泛语言覆盖的建议模型
68
 
69
- - [hunyuan-7b-mt-v1.0](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF):一款多语言模型,对硬件要求适中
 
 
 
 
 
 
 
 
 
70
 
71
  ## 远程提供商
72
 
@@ -80,6 +90,16 @@ Koharu 也可以通过远程或自托管 API 翻译,而不下载本地模型
80
  - DeepSeek
81
  - OpenAI 兼容 API,例如 LM Studio、OpenRouter,或任何暴露 `/v1/models` 与 `/v1/chat/completions` 的端点
82
 
 
 
 
 
 
 
 
 
 
 
83
  远程提供商在 **Settings > API Keys** 中配置。
84
 
85
  如果你需要 LM Studio、OpenRouter 或类似端点的逐步配置说明,请参见 [使用 OpenAI 兼容 API](../how-to/use-openai-compatible-api.md)。
@@ -110,4 +130,4 @@ Koharu 也可以通过远程或自托管 API 翻译,而不下载本地模型
110
  - [维基百科:傅里叶变换](https://en.wikipedia.org/wiki/Fourier_transform)
111
  - [维基百科:图像分割](https://en.wikipedia.org/wiki/Image_segmentation)
112
  - [维基百科:光学字符识别](https://en.wikipedia.org/wiki/Optical_character_recognition)
113
- - [维基百科:Transformer 架构](https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture))
 
24
 
25
  ### 每个视觉模型是什么
26
 
27
+ | 模型 | 模型类型 | Koharu 使用它的原因 |
28
+ | ---------------------------- | --------------- | -------------------------------- |
29
  | `comic-text-bubble-detector` | object detector | 一次推理同时找出文本块和气泡区域 |
30
+ | `comic-text-detector` | 分割网络 | 生成清理用的文本掩码 |
31
+ | `PaddleOCR-VL-1.5` | 视觉语言模型 | 把裁剪图像读成文本 token |
32
+ | `aot-inpainting` | 修复网络 | 在去字后补全被掩码覆盖的区域 |
33
+ | `YuzuMarker.FontDetection` | 分类 / 回归模型 | 为渲染估计字体与风格提示 |
34
 
35
  最重要的设计点是:Koharu 不会用一个模型硬扛所有页面任务。检测、分割、OCR 和修复需要完全不同的输出形式:
36
 
 
54
 
55
  在实践中,这些本地模型通常是量化后的 decoder-only transformer。GGUF 是文件格式,`llama.cpp` 是推理运行时。
56
 
57
+ ### 面向英文输出的翻译型内置本地模型
58
 
59
  - [vntl-llama3-8b-v2](https://huggingface.co/lmg-anon/vntl-llama3-8b-v2-gguf):Q8_0 约 8.5 GB,更适合追求翻译质量
60
+ - [lfm2.5-1.2b-instruct](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Instruct-GGUF):的多语言 instruction 模型,适合低内存机器或的迭代
61
+ - [sugoi-14b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-14B-Ultra-GGUF) 和 [sugoi-32b-ultra](https://huggingface.co/sugoitoolkit/Sugoi-32B-Ultra-GGUF):更大的翻译取向模型,适合有更多 VRAM / RAM 的环境
62
 
63
+ ### 面向中文输出的翻译型内置本地模型
64
 
65
  - [sakura-galtransl-7b-v3.7](https://huggingface.co/SakuraLLM/Sakura-GalTransl-7B-v3.7):在 8 GB 级别显卡上兼顾质量与速度
66
  - [sakura-1.5b-qwen2.5-v1.0](https://huggingface.co/shing3232/Sakura-1.5B-Qwen2.5-v1.0-GGUF-IMX):更轻、更快,适合中端显卡或偏 CPU 的环境
67
 
68
+ ### 面向更广泛语言覆盖的翻译型内置本地模型
69
 
70
+ - [hunyuan-mt-7b](https://huggingface.co/Mungert/Hunyuan-MT-7B-GGUF):一款多语言模型,对硬件要求适中
71
+
72
+ ### 其他内置本地模型家族
73
+
74
+ 本地模型选择器里还包含一些并非专门为翻译调校的通用家族:
75
+
76
+ - Gemma 4 instruct:`gemma4-e2b-it`、`gemma4-e4b-it`、`gemma4-26b-a4b-it`、`gemma4-31b-it`
77
+ - Gemma 4 uncensored:`gemma4-e2b-uncensored`、`gemma4-e4b-uncensored`
78
+ - Qwen 3.5:`qwen3.5-0.8b`、`qwen3.5-2b`、`qwen3.5-4b`、`qwen3.5-9b`、`qwen3.5-27b`、`qwen3.5-35b-a3b`
79
+ - Qwen 3.5 uncensored:`qwen3.5-2b-uncensored`、`qwen3.5-4b-uncensored`、`qwen3.5-9b-uncensored`、`qwen3.5-27b-uncensored`、`qwen3.5-35b-a3b-uncensored`
80
 
81
  ## 远程提供商
82
 
 
90
  - DeepSeek
91
  - OpenAI 兼容 API,例如 LM Studio、OpenRouter,或任何暴露 `/v1/models` 与 `/v1/chat/completions` 的端点
92
 
93
+ ### 当前内置远程模型
94
+
95
+ 当前在提供商选择器中直接内置的默认模型如下:
96
+
97
+ - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
98
+ - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
99
+ - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
100
+ - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-Chat`)
101
+ - OpenAI 兼容 API:模型列表会从你配置的端点动态发现
102
+
103
  远程提供商在 **Settings > API Keys** 中配置。
104
 
105
  如果你需要 LM Studio、OpenRouter 或类似端点的逐步配置说明,请参见 [使用 OpenAI 兼容 API](../how-to/use-openai-compatible-api.md)。
 
130
  - [维基百科:傅里叶变换](https://en.wikipedia.org/wiki/Fourier_transform)
131
  - [维基百科:图像分割](https://en.wikipedia.org/wiki/Image_segmentation)
132
  - [维基百科:光学字符识别](https://en.wikipedia.org/wiki/Optical_character_recognition)
133
+ - [维基百科:Transformer 架构](<https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture)>)
docs/zh-CN/reference/http-api.md CHANGED
@@ -37,21 +37,21 @@ http://127.0.0.1:<PORT>/api/v1
37
 
38
  ### 元信息与字体
39
 
40
- | 方法 | 路径 | 用途 |
41
- | --- | --- | --- |
42
- | `GET` | `/meta` | 获取应用版本与当前 ML 后端 |
43
- | `GET` | `/fonts` | 列出可用于渲染的字体族 |
44
 
45
  ### 文档
46
 
47
- | 方法 | 路径 | 用途 |
48
- | --- | --- | --- |
49
- | `GET` | `/documents` | 列出已加载文档 |
50
- | `POST` | `/documents/import?mode=replace` | 用上传图片替换当前文档集 |
51
- | `POST` | `/documents/import?mode=append` | 将上传图片追加到当前文档集 |
52
- | `GET` | `/documents/{documentId}` | 获取一个文档及其全部文本块元数据 |
53
- | `GET` | `/documents/{documentId}/thumbnail` | 获取缩略图 |
54
- | `GET` | `/documents/{documentId}/layers/{layer}` | 获取指定图层 |
55
 
56
  导入接口使用 multipart form data,并通过重复的 `files` 字段传入文件。
57
 
@@ -65,16 +65,16 @@ http://127.0.0.1:<PORT>/api/v1
65
 
66
  ### 页面管线
67
 
68
- | 方法 | 路径 | 用途 |
69
- | --- | --- | --- |
70
- | `POST` | `/documents/{documentId}/detect` | 检测文本块和版面结构 |
71
- | `POST` | `/documents/{documentId}/ocr` | 对检测出的文本块执行 OCR |
72
- | `POST` | `/documents/{documentId}/inpaint` | 使用当前掩码去除原始文字 |
73
- | `POST` | `/documents/{documentId}/render` | 渲染译文 |
74
- | `POST` | `/documents/{documentId}/translate` | 翻译单个文本块或整页 |
75
- | `PUT` | `/documents/{documentId}/mask-region` | 替换或更新分割掩码局部区域 |
76
- | `PUT` | `/documents/{documentId}/brush-region` | 向 brush 图层写入一个局部补丁 |
77
- | `POST` | `/documents/{documentId}/inpaint-region` | 仅对指定矩形区域重新修复 |
78
 
79
  常用请求细节:
80
 
@@ -86,11 +86,11 @@ http://127.0.0.1:<PORT>/api/v1
86
 
87
  ### 文本块
88
 
89
- | 方法 | 路径 | 用途 |
90
- | --- | --- | --- |
91
- | `POST` | `/documents/{documentId}/text-blocks` | 通过 `x`、`y`、`width`、`height` 创建文本块 |
92
- | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | 更新文本、译文、框几何或样式 |
93
- | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | 删除文本块 |
94
 
95
  当前文本块 patch 结构包含:
96
 
@@ -106,24 +106,24 @@ http://127.0.0.1:<PORT>/api/v1
106
 
107
  ### 导出
108
 
109
- | 方法 | 路径 | 用途 |
110
- | --- | --- | --- |
111
- | `GET` | `/documents/{documentId}/export?layer=rendered` | 导出单张渲染图 |
112
- | `GET` | `/documents/{documentId}/export?layer=inpainted` | 导出单张修复图 |
113
- | `GET` | `/documents/{documentId}/export/psd` | 导出单个分层 PSD |
114
- | `POST` | `/exports?layer=rendered` | 批量导出所有渲染页面 |
115
- | `POST` | `/exports?layer=inpainted` | 批量导出所有修复页面 |
116
 
117
  单文档导出端点返回二进制文件内容。批量导出返回 JSON,其中包含写出的文件数量。
118
 
119
  ### LLM 控制
120
 
121
- | 方法 | 路径 | 用途 |
122
- | --- | --- | --- |
123
- | `GET` | `/llm/catalog` | 获取按本地/提供商分组的 LLM 目录 |
124
- | `GET` | `/llm` | 获取当前 LLM 状态 |
125
- | `PUT` | `/llm` | 加载本地或提供商 target |
126
- | `DELETE` | `/llm` | 卸载当前模型 |
127
 
128
  常用请求细节:
129
 
@@ -149,10 +149,10 @@ http://127.0.0.1:<PORT>/api/v1
149
 
150
  ### 管线任务
151
 
152
- | 方法 | 路径 | 用途 |
153
- | --- | --- | --- |
154
- | `POST` | `/jobs/pipeline` | 启动完整处理任务 |
155
- | `DELETE` | `/jobs/{jobId}` | 取消一个正在运行的任务 |
156
 
157
  管线任务请求可以包含:
158
 
@@ -187,7 +187,7 @@ GET /events
187
  1. `POST /documents/import?mode=replace`
188
  2. `POST /documents/{documentId}/detect`
189
  3. `POST /documents/{documentId}/ocr`
190
- 4. `POST /llm/load`
191
  5. `POST /documents/{documentId}/translate`
192
  6. `POST /documents/{documentId}/inpaint`
193
  7. `POST /documents/{documentId}/render`
 
37
 
38
  ### 元信息与字体
39
 
40
+ | 方法 | 路径 | 用途 |
41
+ | ----- | -------- | -------------------------- |
42
+ | `GET` | `/meta` | 获取应用版本与当前 ML 后端 |
43
+ | `GET` | `/fonts` | 列出可用于渲染的字体族 |
44
 
45
  ### 文档
46
 
47
+ | 方法 | 路径 | 用途 |
48
+ | ------ | ---------------------------------------- | -------------------------------- |
49
+ | `GET` | `/documents` | 列出已加载文档 |
50
+ | `POST` | `/documents/import?mode=replace` | 用上传图片替换当前文档集 |
51
+ | `POST` | `/documents/import?mode=append` | 将上传图片追加到当前文档集 |
52
+ | `GET` | `/documents/{documentId}` | 获取一个文档及其全部文本块元数据 |
53
+ | `GET` | `/documents/{documentId}/thumbnail` | 获取缩略图 |
54
+ | `GET` | `/documents/{documentId}/layers/{layer}` | 获取指定图层 |
55
 
56
  导入接口使用 multipart form data,并通过重复的 `files` 字段传入文件。
57
 
 
65
 
66
  ### 页面管线
67
 
68
+ | 方法 | 路径 | 用途 |
69
+ | ------ | ---------------------------------------- | ----------------------------- |
70
+ | `POST` | `/documents/{documentId}/detect` | 检测文本块和版面结构 |
71
+ | `POST` | `/documents/{documentId}/ocr` | 对检测出的文本块执行 OCR |
72
+ | `POST` | `/documents/{documentId}/inpaint` | 使用当前掩码去除原始文字 |
73
+ | `POST` | `/documents/{documentId}/render` | 渲染译文 |
74
+ | `POST` | `/documents/{documentId}/translate` | 翻译单个文本块或整页 |
75
+ | `PUT` | `/documents/{documentId}/mask-region` | 替换或更新分割掩码局部区域 |
76
+ | `PUT` | `/documents/{documentId}/brush-region` | 向 brush 图层写入一个局部补丁 |
77
+ | `POST` | `/documents/{documentId}/inpaint-region` | 仅对指定矩形区域重新修复 |
78
 
79
  常用请求细节:
80
 
 
86
 
87
  ### 文本块
88
 
89
+ | 方法 | 路径 | 用途 |
90
+ | -------- | --------------------------------------------------- | ------------------------------------------- |
91
+ | `POST` | `/documents/{documentId}/text-blocks` | 通过 `x`、`y`、`width`、`height` 创建文本块 |
92
+ | `PATCH` | `/documents/{documentId}/text-blocks/{textBlockId}` | 更新文本、译文、框几何或样式 |
93
+ | `DELETE` | `/documents/{documentId}/text-blocks/{textBlockId}` | 删除文本块 |
94
 
95
  当前文本块 patch 结构包含:
96
 
 
106
 
107
  ### 导出
108
 
109
+ | 方法 | 路径 | 用途 |
110
+ | ------ | ------------------------------------------------ | -------------------- |
111
+ | `GET` | `/documents/{documentId}/export?layer=rendered` | 导出单张渲染图 |
112
+ | `GET` | `/documents/{documentId}/export?layer=inpainted` | 导出单张修复图 |
113
+ | `GET` | `/documents/{documentId}/export/psd` | 导出单个分层 PSD |
114
+ | `POST` | `/exports?layer=rendered` | 批量导出所有渲染页面 |
115
+ | `POST` | `/exports?layer=inpainted` | 批量导出所有修复页面 |
116
 
117
  单文档导出端点返回二进制文件内容。批量导出返回 JSON,其中包含写出的文件数量。
118
 
119
  ### LLM 控制
120
 
121
+ | 方法 | 路径 | 用途 |
122
+ | -------- | -------------- | -------------------------------- |
123
+ | `GET` | `/llm/catalog` | 获取按本地/提供商分组的 LLM 目录 |
124
+ | `GET` | `/llm` | 获取当前 LLM 状态 |
125
+ | `PUT` | `/llm` | 加载本地或提供商 target |
126
+ | `DELETE` | `/llm` | 卸载当前模型 |
127
 
128
  常用请求细节:
129
 
 
149
 
150
  ### 管线任务
151
 
152
+ | 方法 | 路径 | 用途 |
153
+ | -------- | ---------------- | ---------------------- |
154
+ | `POST` | `/jobs/pipeline` | 启动完整处理任务 |
155
+ | `DELETE` | `/jobs/{jobId}` | 取消一个正在运行的任务 |
156
 
157
  管线任务请求可以包含:
158
 
 
187
  1. `POST /documents/import?mode=replace`
188
  2. `POST /documents/{documentId}/detect`
189
  3. `POST /documents/{documentId}/ocr`
190
+ 4. `PUT /llm`
191
  5. `POST /documents/{documentId}/translate`
192
  6. `POST /documents/{documentId}/inpaint`
193
  7. `POST /documents/{documentId}/render`
docs/zh-CN/reference/index.md CHANGED
@@ -11,5 +11,5 @@ title: 参考
11
  - [CLI 参考](cli.md):启动参数、本地服务器行为与常见运行模式
12
  - [HTTP API 参考](http-api.md):本地 REST 端点、事件流名称、请求载荷与推荐流程
13
  - [MCP 工具参考](mcp-tools.md):内置 MCP 工具名称、参数与建议使用顺序
14
- - [设置参考](settings.md):外观、语言、提供密钥、本地 LLM 预设与关于页行为
15
  - [键盘快捷键](keyboard-shortcuts.md):当前 UI 中记录的默认编辑器快捷键
 
11
  - [CLI 参考](cli.md):启动参数、本地服务器行为与常见运行模式
12
  - [HTTP API 参考](http-api.md):本地 REST 端点、事件流名称、请求载荷与推荐流程
13
  - [MCP 工具参考](mcp-tools.md):内置 MCP 工具名称、参数与建议使用顺序
14
+ - [设置参考](settings.md):外观、引擎选择、提供密钥、Runtime 配置与关于页行为
15
  - [键盘快捷键](keyboard-shortcuts.md):当前 UI 中记录的默认编辑器快捷键
docs/zh-CN/reference/settings.md CHANGED
@@ -4,128 +4,82 @@ title: 设置参考
4
 
5
  # 设置参考
6
 
7
- Koharu 的设置页包含外观、语言、设备、提供商及本地 LLM 配置。本页基于当前应用实现记录可用设置面。
8
 
9
- ## 外观
 
 
 
 
10
 
11
- 主题选
12
 
13
- - `Light`
14
- - `Dark`
15
- - `System`
16
 
17
- 应用会通过端主题提供器立即应用你选中的主题。
18
 
19
- ## 语言
 
 
20
 
21
- 当前 UI 的语言列表来自打包时附带翻译资源
22
 
23
- 当前内置语言包括:
24
 
25
- - `en-US`
26
- - `es-ES`
27
- - `ja-JP`
28
- - `ru-RU`
29
- - `zh-CN`
30
- - `zh-TW`
31
 
32
- 切换 UI 语言会更新前端 locale,同时在当前实现中也会影响带语言感知的 LLM 模型列表。
 
 
 
 
 
 
 
33
 
34
- ## 设备
35
-
36
- 设置页会以 `ML Compute` 显示当前的 ML 计算后端。
37
-
38
- 这个值来自应用的元信息端点,反映 Koharu 当前实际使用的运行时后端,例如 CPU 或 GPU 路径。
39
 
40
  ## API Keys
41
 
42
- 当前内置提供商密钥区域包括
43
 
44
  - `OpenAI`
45
  - `Gemini`
46
  - `Claude`
47
  - `DeepSeek`
 
48
 
49
- 重要行为:
50
-
51
- - API key 通过本地 keyring 集成存储,而不是前端明文存储
52
- - 当前 UI 中 Gemini 被标记为 free-tier provider
53
- - 密码样式输入框只是 UI 中的可见性切换,不代表另一种存储模式
54
-
55
- ## 本地 LLM 与 OpenAI 兼容提供商
56
-
57
- 这个区域用于本地服务器(例如 Ollama、LM Studio)以及自定义 OpenAI 兼容端点。
58
-
59
- ### 预设
60
-
61
- 当前预设包括:
62
-
63
- - `Ollama`
64
- - `LM Studio`
65
- - `Preset 1`
66
- - `Preset 2`
67
-
68
- 默认 base URL:
69
-
70
- - Ollama:`http://localhost:11434/v1`
71
- - LM Studio:`http://127.0.0.1:1234/v1`
72
- - Preset 1:默认为空
73
- - Preset 2:默认为空
74
-
75
- 每个预设都会单独保存:
76
-
77
- - `Base URL`
78
- - `API Key`
79
- - `Model name`
80
- - `Temperature`
81
- - `Max tokens`
82
- - `Custom system prompt`
83
-
84
- 这意味着你可以在同一个设置页里保留多个兼容后端,并在它们之间切换。
85
-
86
- ### 模型选择器的必要字段
87
-
88
- 在当前实现中,只有同时填写以下两项,一个基于预设的 OpenAI 兼容模型才会变成可选项:
89
-
90
- - `Base URL`
91
- - `Model name`
92
-
93
- 空预设不会出现在可用模型列表中。
94
-
95
- ### 高级字段
96
-
97
- 可展开的高级区块目前包含:
98
-
99
- - `Temperature`
100
- - `Max tokens`
101
- - `Custom system prompt`
102
-
103
- 行为说明:
104
 
105
- - `Temperature` `Max tokens` 留空时,不会发送覆盖值
106
- - `Custom system prompt` 留空时,会使 Koharu 默认的漫画翻译系统提示词
107
- - reset 按钮只会清除当前预设上的自定义 prompt 覆盖
 
 
108
 
109
- ### Test Connection
110
 
111
- `Test Connection` 用来检查当前预设能否连通。
112
 
113
- 当前实现会:
114
 
115
- - 向 Koharu 的 `/llm/ping` 端点发请求
116
- - 检查预设中的 `Base URL`
117
- - 如果填了 API key,则可选地带上它
118
- - 在界面里直接显示成功或失败
119
- - 成功时展示模型数量和延迟
120
- - 对底层兼容模型列表请求使用 5 秒超时
121
 
122
- 这只是连接性测试,不会真的加载模型。
123
 
124
- ## 关于
 
 
 
 
 
125
 
126
- 设置页会链接到一个单独的关于页。
127
 
128
- 当前关于页会显示:
129
 
130
  - 当前应用版本
131
  - 是否存在更新的 GitHub release
@@ -136,16 +90,16 @@ Koharu 的设置页包含外观、语言、设备、提供商以及本地 LLM
136
 
137
  ## 持久化模型
138
 
139
- 当前设置数据不同存储层中:
140
 
141
- - 提供商 API key 存在系统 keyring
142
- - 本地 LLM 预设配置保存在 Koharu 的前端 preferences store
143
- - 主题和其他 UI 偏好也保存在本地
144
 
145
- 因此,清前端偏好并不等于清保存的提供 API key。
146
 
147
  ## 相关页面
148
 
149
  - [使用 OpenAI 兼容 API](../how-to/use-openai-compatible-api.md)
150
- - [模型与提供](../explanation/models-and-providers.md)
151
  - [HTTP API 参考](http-api.md)
 
4
 
5
  # 设置参考
6
 
7
+ 当前 Koharu 的 Settings 面主要包含以 5 个区域:
8
 
9
+ - `Appearance`
10
+ - `Engines`
11
+ - `API Keys`
12
+ - `Runtime`
13
+ - `About`
14
 
15
+ 本页基于当前应用实现说明这些设置的实际行为。
16
 
17
+ ## Appearance
 
 
18
 
19
+ `Appearance` 标签页当包含:
20
 
21
+ - 主题:`Light`、`Dark`、`System`
22
+ - 从内置翻译资源中选择 UI 语言
23
+ - 用于渲染译文的 `Rendering Font`
24
 
25
+ 主题、语言和渲染字体变更都会在前端立即生效
26
 
27
+ ## Engines
28
 
29
+ `Engines` 标签页用于选择各个流水线阶段使用的后端:
 
 
 
 
 
30
 
31
+ - `Detector`
32
+ - `Bubble Detector`
33
+ - `Font Detector`
34
+ - `Segmenter`
35
+ - `OCR`
36
+ - `Translator`
37
+ - `Inpainter`
38
+ - `Renderer`
39
 
40
+ 这些值会写入共享应用配置,并在修改时立即保存。
 
 
 
 
41
 
42
  ## API Keys
43
 
44
+ `API Keys` 标签页当前覆盖以下内置提供
45
 
46
  - `OpenAI`
47
  - `Gemini`
48
  - `Claude`
49
  - `DeepSeek`
50
+ - `OpenAI Compatible`
51
 
52
+ 当前行为:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
+ - 提供方 API key 存储在系统 keyring 中是明文写入 `config.toml`
55
+ - 提供方的 `Base URL` 保存在共享应配置中
56
+ - `OpenAI Compatible` 需要自定义 `Base URL`
57
+ - `OpenAI Compatible` 的模型列表会通过查询已配置端点动态发现
58
+ - 清除密钥会把它从 keyring 中删除
59
 
60
+ API 响应不会返回原始密钥,而是返回已遮罩的值。
61
 
62
+ ## Runtime
63
 
64
+ `Runtime` 标签页集中放置影响共享本地运行时、且需要重启后生效的设置
65
 
66
+ - `Data Path`
67
+ - `HTTP Connect Timeout`
68
+ - `HTTP Read Timeout`
69
+ - `HTTP Max Retries`
 
 
70
 
71
+ 当前行为:
72
 
73
+ - `Data Path` 控制运行时包、下载模型、面清单和图像 blob 的存储位置
74
+ - `HTTP Connect Timeout` 控制建立 HTTP 连接时的最长等待时间
75
+ - `HTTP Read Timeout` 控制读取 HTTP 响应时的最长等待时间
76
+ - `HTTP Max Retries` 控制遇到临时 HTTP 故障时的自动重试次数
77
+ - 这些 HTTP 值会应用到下载和提供方请求共用的运行时 HTTP 客户端
78
+ - 由于这些值在启动时加载,应用变更时会先保存配置,再重启桌面应用
79
 
80
+ ## About
81
 
82
+ `About` 标签页当前显示:
83
 
84
  - 当前应用版本
85
  - 是否存在更新的 GitHub release
 
90
 
91
  ## 持久化模型
92
 
93
+ 当前设置数据分多个存储层中:
94
 
95
+ - `config.toml` 保存 `data`、`http`、`pipeline` 以及提供方 `baseUrl` 等共享配置
96
+ - 提供方 API key 系统 keyring
97
+ - 主题、语言渲染字体前端 preferences 层中
98
 
99
+ 因此,清前端 preferences 并不等于清已保存的提供 API key 或共享运行时配置
100
 
101
  ## 相关页面
102
 
103
  - [使用 OpenAI 兼容 API](../how-to/use-openai-compatible-api.md)
104
+ - [模型与提供](../explanation/models-and-providers.md)
105
  - [HTTP API 参考](http-api.md)
docs/zh-CN/tutorials/translate-your-first-page.md CHANGED
@@ -80,6 +80,7 @@ Koharu 可以帮助处理文本排版和纵排 CJK 渲染,但最终页面仍
80
  - 语气和角色说话风格
81
  - 换行与气泡适配
82
  - 字体选择与描边可读性
 
83
  - OCR 看起来不太可信的文本块
84
 
85
  如果译文内容本身没问题,但版面显得过于拥挤,导出前先调整文本块或样式。
 
80
  - 语气和角色说话风格
81
  - 换行与气泡适配
82
  - 字体选择与描边可读性
83
+ 现在的默认描边会为了对比度自动选黑色或白色,但如果页面需要,你仍然可以手动覆盖。
84
  - OCR 看起来不太可信的文本块
85
 
86
  如果译文内容本身没问题,但版面显得过于拥挤,导出前先调整文本块或样式。