diff --git a/README.md b/README.md
index 3688a3e..27117dd 100644
--- a/README.md
+++ b/README.md
@@ -1,80 +1,86 @@
+
+> [!NOTE]
+> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
+> [English](./README.en.md) · [原始项目](https://github.com/jina-ai/reader) · [上游 README](https://github.com/jina-ai/reader/blob/HEAD/README.md)
+> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
+
# Reader
[](https://codecov.io/gh/jina-ai/reader)
[](https://deepwiki.com/jina-ai/reader)
-Your LLMs deserve better input.
+你的 LLM 值得获得更好的输入。
-Reader does two things:
-- **Read**: It converts any URL to an **LLM-friendly** input with `https://r.jina.ai/https://your.url`. Get improved output for your agent and RAG systems at no cost.
-- **Search**: It searches the web for a given query with `https://s.jina.ai/your+query`. This allows your LLMs to access the latest world knowledge from the web.
+Reader 提供两项能力:
+- **Read(读取)**:它将任意 URL 转换为适合 **LLM** 使用的输入,采用 `https://r.jina.ai/https://your.url`。无需额外成本,即可为你的智能体(agent)和 RAG 系统获得更优的输出。
+- **Search(搜索)**:它使用 `https://s.jina.ai/your+query` 针对给定查询搜索网络。这使你的 LLM 能够访问来自网络的最新世界知识。
-Check out [the live demo](https://jina.ai/reader#demo)
+请查看[在线演示](https://jina.ai/reader#demo)
-Or just visit these URLs (**Read**) https://r.jina.ai/https://github.com/jina-ai/reader, (**Search**) https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F and see yourself.
+或直接访问这些 URL(**Read**)https://r.jina.ai/https://github.com/jina-ai/reader,(**Search**)https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F 亲自体验。
-> Feel free to use Reader API in production. It is free, stable and scalable. We are maintaining it actively as one of the core products of Jina AI. [Check out rate limit](https://jina.ai/reader#pricing)
+> 欢迎在生产环境中使用 Reader API。它免费、稳定且可扩展。我们将其作为 Jina AI 的核心产品之一积极维护。[查看速率限制](https://jina.ai/reader#pricing)
-> This repository is the open source branch of the codebase behind `https://r.jina.ai` and `https://s.jina.ai`. It runs in stateless or bucket-cached mode; the MongoDB-backed SaaS storage layer is not included here.
+> 本仓库是 `https://r.jina.ai` 与 `https://s.jina.ai` 背后代码库的开源分支。它以无状态或 bucket 缓存模式运行;此处不包含基于 MongoDB 的 SaaS 存储层。
-## Updates
+## 更新
-- **2026-04** — Re-synchronized the open source branch with the SaaS code. The MongoDB-backed storage layer is stripped; the oss branch runs in stateless mode out of the box, with optional MinIO/S3-compatible bucket caching via `docker compose`. See [Local development](#local-development).
-- **2025-12** — Storage layer decoupled and binary file uploads landed. PDFs and MS Office documents (Word, Excel, PowerPoint) can now be POSTed directly via the `file` body field — no need to host them first. See [cookbooks.md](./cookbooks.md#pdf-ms-office-and-raw-html-uploads).
-- **2025-03** — Major refactor: Reader is no longer a Firebase application. The SaaS migrated off Firestore + Cloud Functions to a Cloud Run image with MongoDB Atlas, removing the platform-coupled bits and unblocking the local-Docker path above.
-- **2024-05** — `s.jina.ai` launched, extending Reader from URL→markdown to search→markdown. PDFs added the same month — any URL ending in `.pdf` is parsed with PDF.js and returned as markdown.
-- **2024-04** — Reader released and `r.jina.ai` went live as Jina AI's first SaaS API for converting URLs to LLM-friendly input.
+- **2026-04** — 已将开源分支与 SaaS 代码重新同步。基于 MongoDB 的存储层已剥离;oss 分支开箱即可以无状态模式运行,并可通过 `docker compose` 可选启用 MinIO/S3 兼容的 bucket 缓存。参见[本地开发](#local-development)。
+- **2025-12** — 存储层解耦,并支持二进制文件上传。PDF 及 MS Office 文档(Word、Excel、PowerPoint)现可直接通过 `file` 请求体字段 POST 上传——无需事先托管。参见 [cookbooks.md](./cookbooks.md#pdf-ms-office-and-raw-html-uploads)。
+- **2025-03** — 重大重构:Reader 不再是 Firebase 应用。SaaS 已从 Firestore + Cloud Functions 迁移至搭载 MongoDB Atlas 的 Cloud Run 镜像,移除了与平台耦合的部分,并打通了上文所述的本地 Docker 路径。
+- **2024-05** — `s.jina.ai` 上线,将 Reader 从 URL→markdown 扩展至 search→markdown。同月新增 PDF 支持——任何以 `.pdf` 结尾的 URL 均使用 PDF.js 解析并返回为 markdown。
+- **2024-04** — Reader 发布,`r.jina.ai` 作为 Jina AI 首个将 URL 转换为 LLM 友好输入的 SaaS API 正式上线。
-## What Reader can read
+## Reader 可读取的内容
-- **Web pages** — rendered with headless Chrome, or fetched lightweight via `curl-impersonate`. Reader picks intelligently between the two.
-- **PDFs** — any URL, parsed with PDF.js. [See this NASA PDF result](https://r.jina.ai/https://www.nasa.gov/wp-content/uploads/2023/01/55583main_vision_space_exploration2.pdf) vs [the original](https://www.nasa.gov/wp-content/uploads/2023/01/55583main_vision_space_exploration2.pdf).
-- **MS Office documents** — Word, Excel, PowerPoint, converted via LibreOffice and then processed as HTML/PDF.
-- **Images** — captioned by a vision-language model, so your downstream text-only LLM gets *just enough* hints to reason about them.
+- **网页** — 通过无头 Chrome 渲染,或通过 `curl-impersonate` 轻量抓取。Reader 会智能地在两者之间选择。
+- **PDF** — 任意 URL,使用 PDF.js 解析。[查看此 NASA PDF 结果](https://r.jina.ai/https://www.nasa.gov/wp-content/uploads/2023/01/55583main_vision_space_exploration2.pdf) 与[原始文件](https://www.nasa.gov/wp-content/uploads/2023/01/55583main_vision_space_exploration2.pdf).
+- **MS Office 文档** — Word、Excel、PowerPoint,经 LibreOffice 转换后按 HTML/PDF 处理。
+- **图片** — 由视觉-语言模型(vision-language model)生成说明文字,使你的下游纯文本 LLM 获得*恰到好处*的提示以进行推理。
-## Usage
+## 用法
-### Using `r.jina.ai` for single URL fetching
-Simply prepend `https://r.jina.ai/` to any URL. For example, to convert the URL `https://en.wikipedia.org/wiki/Artificial_intelligence` to an LLM-friendly input, use the following URL:
+### 使用 `r.jina.ai` 抓取单个 URL
+只需在任意 URL 前添加 `https://r.jina.ai/` 前缀。例如,要将 URL `https://en.wikipedia.org/wiki/Artificial_intelligence` 转换为 LLM 友好输入,可使用以下 URL:
[https://r.jina.ai/https://en.wikipedia.org/wiki/Artificial_intelligence](https://r.jina.ai/https://en.wikipedia.org/wiki/Artificial_intelligence)
-### [Using `r.jina.ai` for a full website fetching (Google Colab)](https://colab.research.google.com/drive/1uoBy6_7BhxqpFQ45vuhgDDDGwstaCt4P#scrollTo=5LQjzJiT9ewT)
+### [使用 `r.jina.ai` 抓取完整网站(Google Colab)](https://colab.research.google.com/drive/1uoBy6_7BhxqpFQ45vuhgDDDGwstaCt4P#scrollTo=5LQjzJiT9ewT)
-### Using `s.jina.ai` for web search
-Simply prepend `https://s.jina.ai/` to your search query. Note that if you are using this in the code, make sure to encode your search query first, e.g. if your query is `Who will win 2024 US presidential election?` then your url should look like:
+### 使用 `s.jina.ai` 进行网络搜索
+只需在搜索查询前添加 `https://s.jina.ai/` 前缀。注意,若在代码中使用,请先对搜索查询进行编码,例如若查询为 `Who will win 2024 US presidential election?`,则 URL 应如下所示:
[https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F](https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F)
-Behind the scenes, Reader searches the web, fetches the top 5 results, visits each URL, and applies `r.jina.ai` to it. This is different from many `web search function-calling` in agent/RAG frameworks, which often return only the title, URL, and description provided by the search engine API. If you want to read one result more deeply, you have to fetch the content yourself from that URL. With Reader, `http://s.jina.ai` automatically fetches the content from the top 5 search result URLs for you (reusing the tech stack behind `http://r.jina.ai`). This means you don't have to handle browser rendering, blocking, or any issues related to JavaScript and CSS yourself.
+在幕后,Reader 会搜索网络、获取前 5 条结果、访问每个 URL,并对其应用 `r.jina.ai`。这与许多智能体/RAG 框架中的 `web search function-calling` 不同——后者通常只返回搜索引擎 API 提供的标题、URL 和描述。若要对某条结果做更深入阅读,你必须自行从该 URL 抓取内容。使用 Reader 时,`http://s.jina.ai` 会自动为你从前 5 条搜索结果 URL 抓取内容(复用 `http://r.jina.ai` 背后的技术栈)。这意味着你无需自行处理浏览器渲染、拦截,或与 JavaScript 和 CSS 相关的任何问题。
-### Using `s.jina.ai` for in-site search
-Simply specify `site` in the query parameters such as:
+### 使用 `s.jina.ai` 进行站内搜索
+只需在查询参数中指定 `site`,例如:
```bash
curl 'https://s.jina.ai/When%20was%20Jina%20AI%20founded%3F?site=jina.ai&site=github.com'
```
-### [Interactive Code Snippet Builder](https://jina.ai/reader#apiform)
+### [交互式代码片段构建器](https://jina.ai/reader#apiform)
-We highly recommend using the code builder to explore different parameter combinations of the Reader API.
+我们强烈建议使用代码构建器探索 Reader API 的不同参数组合。
-### Using request headers
+### 使用请求头
-You can control the behavior of the Reader API using request headers. The list below covers the most useful ones — for the full surface with up-to-date defaults and validation rules, see the live API docs at [https://r.jina.ai/docs](https://r.jina.ai/docs), or the source of truth in [`src/dto/crawler-options.ts`](./src/dto/crawler-options.ts).
+你可以通过请求头控制 Reader API 的行为。下列列表涵盖最实用的选项——完整接口及最新默认值与校验规则,请参见 [https://r.jina.ai/docs](https://r.jina.ai/docs), 上的在线 API 文档,或 [`src/dto/crawler-options.ts`](./src/dto/crawler-options.ts) 中的权威源码。
-- `x-respond-with` — select the output format.
- - `markdown` returns markdown *without* going through `readability`
- - `html` returns `documentElement.outerHTML`
- - `text` returns `document.body.innerText`
- - `screenshot` returns the URL of the webpage's screenshot
- - `pageshot` similar to `screenshot` but tries to capture the whole page instead of just the viewport
- - `frontmatter` returns **Markdown with a YAML frontmatter block**. The default plain-text response uses a custom `Title: …` / `URL Source: …` header format; `frontmatter` replaces that with a front matter block. Example:
+- `x-respond-with` — 选择输出格式。
+ - `markdown` 返回 markdown,*不*经过 `readability`
+ - `html` 返回 `documentElement.outerHTML`
+ - `text` 返回 `document.body.innerText`
+ - `screenshot` 返回网页截图的 URL
+ - `pageshot` 类似于 `screenshot`,但会尝试截取整页而非仅视口
+ - `frontmatter` 返回**带 YAML frontmatter 块的 Markdown**。默认纯文本响应使用自定义的 `Title: …` / `URL Source: …` 头格式;`frontmatter` 会将其替换为 front matter 块。示例:
```bash
curl -H 'X-Respond-With: frontmatter' 'https://r.jina.ai/https://example.com'
@@ -92,67 +98,67 @@ You can control the behavior of the Reader API using request headers. The list b
This domain is for use in illustrative examples in documents. ...
```
- - `markdown+frontmatter` — like `frontmatter` but covers the full page without readability filtering.
-- `x-engine` — enforces a fetching engine: `browser` (headless Chrome), `curl` (lightweight, no JS), or `auto` (the default — Combined use of both browser and curl).
-- `x-proxy-url` — route the traffic through your designated proxy.
-- `x-cache-tolerance` — integer seconds; how stale a cached page is acceptable.
-- `x-no-cache: true` — bypass the cached page (lifetime 3600s). Equivalent to `x-cache-tolerance: 0`.
-- `x-target-selector` — a CSS selector. Reader returns content within the matched element instead of the full page. Useful when automatic content extraction misses what you want.
-- `x-wait-for-selector` — a CSS selector. Reader waits until the matched element is rendered before returning. If `x-target-selector` is set, this can be omitted to wait for the same element.
-- `x-timeout` — integer seconds (max 180). When set, Reader will not return early; it waits for network idle or until the timeout is reached.
-- `x-max-tokens` — integer (≥500). Trim the response so it never exceeds this many tokens. Useful as a per-request guardrail when feeding a fixed-size context window — Reader truncates rather than rejects.
-- `x-token-budget` — integer. Reject the request if the resulting content would exceed this many tokens. Use this when *over*-budget output is worse than no output (e.g. cost control). Ignored on the search endpoint.
-- `x-respond-timing` — explicit control over *when* Reader is willing to return. Trade off latency against completeness:
- - `html` — return as soon as the raw HTML lands. No JS execution, no waiting.
- - `visible-content` — return the moment readable content is parseable. Lowest latency that still produces text.
- - `mutation-idle` — wait for DOM mutations to settle for ≥0.2s. Good default for SPAs that lazy-render above the fold.
- - `resource-idle` — wait for content-affecting resources to finish loading (≥0.5s quiet). The default heuristic for content-shaped requests.
- - `media-idle` — wait for media (images, video, fonts) to also finish. Use with `screenshot` / `pageshot` / `vlm`.
- - `network-idle` — full `networkidle0`. Slowest, most complete. Implied when `x-timeout` ≥ 20.
+ - `markdown+frontmatter` — 类似 `frontmatter`,但覆盖整页且不做可读性过滤。
+- `x-engine` — 强制指定抓取引擎:`browser`(无头 Chrome)、`curl`(轻量,无 JS),或 `auto`(默认——浏览器与 curl 组合使用)。
+- `x-proxy-url` — 通过你指定的代理路由流量。
+- `x-cache-tolerance` — 整数秒;可接受的缓存页面陈旧程度。
+- `x-no-cache: true` — 绕过缓存页面(生命周期 3600s)。等效于 `x-cache-tolerance: 0`。
+- `x-target-selector` — CSS 选择器。Reader 返回匹配元素内的内容,而非整页。当自动内容提取遗漏了你所需内容时很有用。
+- `x-wait-for-selector` — CSS 选择器。Reader 会等待匹配元素渲染完成后再返回。若已设置 `x-target-selector`,可省略此项以等待同一元素。
+- `x-timeout` — 整数秒(最大 180)。设置后 Reader 不会提前返回;会等待网络空闲或直至超时。
+- `x-max-tokens` — 整数(≥500)。裁剪响应,使其不超过该 token 数。在向固定大小的上下文窗口喂入数据时,可作为按请求的防护栏——Reader 会截断而非拒绝。
+- `x-token-budget` — 整数。若结果内容将超过该 token 数则拒绝请求。当*超出*预算的输出比无输出更糟时使用(例如成本控制)。在搜索端点上会被忽略。
+- `x-respond-timing` — 显式控制 Reader *何时*愿意返回。在延迟与完整性之间权衡:
+ - `html` — 原始 HTML 一到达即返回。不执行 JS,不等待。
+ - `visible-content` — 可读内容可解析的瞬间即返回。仍能产出文本的最低延迟。
+ - `mutation-idle` — 等待 DOM 变更稳定 ≥0.2s。适合首屏懒渲染的 SPA 的良好默认值。
+ - `resource-idle` — 等待影响内容的资源加载完成(安静 ≥0.5s)。面向内容形态请求的默认启发式策略。
+ - `media-idle` — 同时等待媒体(图片、视频、字体)加载完成。可与 `screenshot` / `pageshot` / `vlm` 配合使用。
+ - `network-idle` — 完整 `networkidle0`。最慢,最完整。当 `x-timeout` ≥ 20 时隐含启用。
- When omitted, Reader picks one based on `x-respond-with`, `x-timeout`, and `x-with-iframe`. See `presumedRespondTiming` in [src/dto/crawler-options.ts](./src/dto/crawler-options.ts) for the exact rules.
-- `x-with-generated-alt: true` — caption images on the page with a VLM.
-- `x-retain-images` — control how images survive into the output:
- - `all` (default) — keep `` markdown for every image.
- - `none` — drop images entirely.
- - `alt` — keep alt text only, no URLs. Cheap on tokens; useful when the downstream LLM has no use for the image link.
-- `x-retain-links` — control how links survive into the output:
- - `all` (default) — keep `[text](url)` markdown.
- - `none` — drop links entirely.
- - `text` — keep link anchor text only, drop URLs. Best for embedding / semantic-index pipelines where URLs are noise.
- - `gpt-oss` — emit citations in gpt-oss's `【{id}†...】` format and append a numbered URL footer (also auto-enables `x-with-links-summary`).
-- `x-retain-media` — control how `