-
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 000000000..27a256dda
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,33 @@
+import js from '@eslint/js'
+import prettier from 'eslint-config-prettier/flat'
+import { defineConfig, globalIgnores } from 'eslint/config'
+import pluginVue from 'eslint-plugin-vue'
+import globals from 'globals'
+import tseslint from 'typescript-eslint'
+
+export default defineConfig(
+ globalIgnores(['dist', '.vitepress/cache']),
+ js.configs.recommended,
+ tseslint.configs.recommended,
+ pluginVue.configs['flat/recommended'],
+ {
+ languageOptions: {
+ globals: { ...globals.browser, ...globals.node },
+ },
+ },
+ {
+ files: ['**/*.vue'],
+ languageOptions: {
+ parserOptions: { parser: tseslint.parser },
+ },
+ },
+ {
+ files: ['.vitepress/theme/**'],
+ rules: {
+ // VitePress's `Layout` and the components used as tags in Markdown keep their single-word names
+ 'vue/multi-word-component-names': 'off',
+ },
+ },
+ // formatting is Prettier's job
+ prettier
+)
diff --git a/layouts/default.vue b/layouts/default.vue
deleted file mode 100644
index bfb6f7a8d..000000000
--- a/layouts/default.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('post.contributors') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/layouts/home.vue b/layouts/home.vue
deleted file mode 100644
index 2e67333ae..000000000
--- a/layouts/home.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/layouts/statement.vue b/layouts/statement.vue
deleted file mode 100644
index be3f8cc6b..000000000
--- a/layouts/statement.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
diff --git a/locales/en.yml b/locales/en.yml
deleted file mode 100644
index 297de331a..000000000
--- a/locales/en.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-siteConfig:
- title: OpenList Docs
- description: Documentation site for OpenList
-
-# ! Navigation bar search entry
-search:
- tip: search
-
-# ! Navigation menu
-nav:
- configuration: Configuration
- guide: User Guide
- faq: FAQ
- seeds: Transfer Seeds
- community:
- title: Community
- discussions: Github Discussions
- telegram: Telegram
- telegram_channel: Telegram Channel
- github: GitHub
- ecosystem: Ecosystem
-
-# ! Category titles (setting `title` in index.md's frontmatter will not work)
-category:
- configuration: Configuration
- # User Guide
- guide: User Guide
- installation: Installation
- advanced: Advanced
- drivers: Storage Setup
- # FAQ
- faq: FAQ
- seeds: Transfer Seeds
- # Developer Guide
- api: API Documentation
- admin: admin
- # Changelog
- changelog: Changelog
- # Ecosystem
- ecosystem: Ecosystem
- eco_official: Official Ecosystem
- eco_worker: OpenList Worker
-
-# ! Index page (layout: hero)
-hero:
- banner: 🗂️ A file list program that supports multiple storage, powered by Gin and SolidJS
- actions:
- get-started: Get Started
- view-github: View Github
- disclaimer: Disclaimer
- privacy: Privacy Policy
- terms: Terms of Service
-
-# ! components/WorkInProgress.vue
-wip: WIP, please stay tuned
-
-tooltip:
- # Reserved and used by valaxy-theme-press
- edit_this_page: Edit this page on GitHub
- back_to_top: Back to Top
-
-post:
- # Reserved and used by valaxy-theme-press
- contributors: Contributors
-
-# ! components/OpenListDownload.vue
-download:
- all: All
- os: Operating System
- cpu: CPU Architecture
- down_source: Download Source
- download: Download
- gh_proxy: GhProxy
- version: Version
- beta: Beta
- latest: Latest
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
deleted file mode 100644
index a5473820b..000000000
--- a/locales/zh-CN.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-siteConfig:
- title: OpenList 文档
- description: OpenList 文档网站
-
-# ! Navigation bar search entry
-search:
- tip: search
-
-# ! Navigation menu
-nav:
- configuration: 配置指南
- guide: 用户指南
- faq: FAQ
- seeds: 传输种子
- community:
- title: 社区
- discussions: Github 讨论区
- telegram: Telegram
- telegram_channel: Telegram 频道
- github: GitHub
- ecosystem: 生态项目
-# ! Category titles (setting `title` in index.md's frontmatter will not work)
-category:
- # User Guide
- configuration: 配置指南
- guide: 用户指南
- installation: 安装教程
- advanced: 高级设置
- drivers: 添加存储
- # FAQ
- faq: FAQ
- seeds: 传输种子
- # Developer Guide
- developer: 开发指引
- api: API 文档
- admin: admin
- # Changelog
- changelog: Changelog
- # Ecosystem
- ecosystem: 生态项目
- eco_official: 官方生态项目
- eco_worker: OpenList Worker
-
-# ! Index page (layout: hero)
-hero:
- banner: 🗂️ 一个支持多种存储的文件列表程序,使用 Gin 和 SolidJS
- actions:
- get-started: 快速上手
- view-github: 查看 GitHub
- disclaimer: 免责声明
- privacy: 隐私政策
- terms: 使用条款
-
-# ! components/WorkInProgress.vue
-wip: 编写中,敬请期待
-
-tooltip:
- # Reserved and used by valaxy-theme-press
- edit_this_page: 在 GitHub 上编辑此页
- back_to_top: 回到顶部
-
-post:
- # Reserved and used by valaxy-theme-press
- contributors: 贡献者
-
-# ! components/OpenListDownload.vue
-download:
- all: 全部
- os: 操作系统
- cpu: CPU 架构
- download: 下载
- down_source: 下载来源
- gh_proxy: 加速下载
- version: 版本
- beta: 测试版
- latest: 最新版
diff --git a/package.json b/package.json
index 1435e7687..5c1f213af 100644
--- a/package.json
+++ b/package.json
@@ -1,53 +1,54 @@
{
"name": "openlist-docs",
"version": "0.0.0",
+ "private": true,
"type": "module",
- "packageManager": "pnpm@10.12.1",
+ "packageManager": "pnpm@12.6.0",
+ "engines": {
+ "node": ">=24"
+ },
"license": "AGPL-3.0",
"scripts": {
- "build": "node utils/ensure-full-git.js && npm run build:ssg",
- "build:spa": "valaxy build",
- "build:ssg": "NODE_OPTIONS='--max-old-space-size=8192' valaxy build --ssg",
- "dev": "valaxy",
- "rss": "valaxy rss",
- "serve": "vite preview",
- "vitepress:dev": "vitepress dev",
- "vitepress:build": "vitepress build",
- "vitepress:preview": "vitepress preview",
+ "dev": "vitepress dev",
+ "build": "node utils/ensure-full-git.js && vitepress build",
+ "preview": "vitepress preview",
"format": "prettier --write .",
"format:check": "prettier --check .",
+ "lint": "eslint .",
+ "typecheck": "vue-tsc --noEmit",
"prepare": "husky"
},
"dependencies": {
"@giscus/vue": "^3.1.1",
- "@iconify-json/devicon-plain": "^1.2.31",
- "@iconify-json/logos": "^1.2.4",
- "@iconify-json/ri": "^1.2.5",
- "@iconify-json/vscode-icons": "^1.2.23",
- "valaxy": "0.25.9",
- "valaxy-addon-algolia": "0.2.0",
- "valaxy-addon-components": "0.1.0",
- "valaxy-addon-git-log": "0.3.2",
- "valaxy-theme-press": "0.25.9",
- "vitepress-plugin-group-icons": "^1.6.1"
+ "@vueuse/core": "^12.8.2",
+ "gray-matter": "^4.0.3",
+ "medium-zoom": "^1.1.0",
+ "mermaid": "^12.0.0",
+ "vitepress": "^1.6.4",
+ "vitepress-plugin-group-icons": "^1.7.6",
+ "vue": "^3.5.43"
},
"devDependencies": {
- "@iconify-json/carbon": "1.2.9",
- "@iconify-json/devicon": "^1.2.32",
- "@iconify-json/simple-icons": "1.2.39",
- "@types/node": "^24.0.15",
+ "@eslint/js": "^10.0.1",
+ "@types/node": "^24.19.0",
+ "eslint": "^10.11.0",
+ "eslint-config-prettier": "^10.1.8",
+ "eslint-plugin-vue": "^10.11.1",
+ "globals": "^17.12.0",
"husky": "^9.1.7",
- "lint-staged": "^16.1.2",
- "nodemon": "^3.1.10",
- "prettier": "^3.6.2",
- "vite": "6.3.5",
- "vitepress": "1.1.4",
- "vue": "^3.5.17",
- "vue-i18n": "^11.1.10",
- "vue-tsc": "^2.2.12"
+ "lint-staged": "^17.6.0",
+ "prettier": "^3.9.9",
+ "typescript": "^6.0.3",
+ "typescript-eslint": "^8.70.1",
+ "vue-eslint-parser": "^10.4.1",
+ "vue-tsc": "^3.3.11"
},
"lint-staged": {
- "*.{js,ts,vue,md,json,yml,yaml}": [
+ "*.{js,ts,mts,vue}": [
+ "eslint --fix",
+ "prettier --write"
+ ],
+ "*.{json,css,md,yml,yaml}": [
"prettier --write"
]
}
diff --git a/pages/api/apidocs.md b/pages/api/apidocs.md
index 5f190b52e..cfb5b59cf 100644
--- a/pages/api/apidocs.md
+++ b/pages/api/apidocs.md
@@ -1,38 +1,14 @@
---
-title:
- en: API Documentation
- zh-CN: API 文档
-icon: iconfont icon-setting
-# This control sidebar order
top: 10
-# A page can have multiple categories
categories:
- api
-# A page can have multiple tags
-tag:
- - API
- - Guide
-# this page is sticky in article list
-sticky: true
-# this page will appear in starred articles
-star: true
---
-::: en
-Visit [fox.oplist.org](https://fox.oplist.org) to view and interact with our API documentation online. Live debugging is supported.
+# API 文档
-All contents, endpoints, and code provided by this API are licensed under the [GNU Affero General Public License v3 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html).
-
-
-
-
-:::
-::: zh-CN
访问 [fox.oplist.org](https://fox.oplist.org) 在线查看API文档并调试 。
所有通过此API提供的内容、端点和代码均根据[GNU Affero通用公共许可证v3(AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html)授权。


-
-:::
diff --git a/pages/configuration/configuration.md b/pages/configuration/configuration.md
index eace7dfc3..460ee3de1 100644
--- a/pages/configuration/configuration.md
+++ b/pages/configuration/configuration.md
@@ -1,30 +1,13 @@
---
-title:
- en: Configuration
- zh-CN: 配置文件
categories:
- configuration
-# A page can have multiple tags
top: 70
---
-### Initial config { lang="en" }
+# 配置文件
-### 初始配置 { lang="zh-CN" }
+### 初始配置
-::: en
-::: tip
-After modifying the configuration file, restart OpenList for changes to take effect
-
-- Windows/macOS: `/data/config.json`
-- Linux: one-click script directory, `/opt/openlist/data/config.json` or `/data/config.json`
-- Docker: `/data/config.json`
-- OpenWrt: modify config on server if using `luci-app-openlist` , otherwise `/data/config.json`
-- Other: `/data/config.json`
-
-:::
-
-::: zh-CN
::: tip
`config.json` 内配置文件修改后都需要重启 OpenList 才会生效
@@ -173,42 +156,14 @@ After modifying the configuration file, restart OpenList for changes to take eff
}
```
-## Field Explanation { lang="en" }
-
-## 字段说明 { lang="zh-CN" }
+## 字段说明
### force
-::: en
-By default OpenList reads the configuration from environment variables, set this field to `true` to force OpenList to read config from the configuration file.
-
-:::
-
-::: zh-CN
程序会优先从环境变量中读取配置,设置 `force` 为 `true` 会使程序忽略环境变量强制读取配置文件。
-:::
-
### site_url
-::: en
-The address of your OpenList server, such as `https://pan.example.com`. This address is essential for some features, and thus thry may not work properly if unset:
-
-- thumbnailing `LocalStorage`
-- previewing site after setting web proxy
-- displaying download address after setting web proxy
-- reverse-proxying to site sub directories
-- ...
-
-Do not include the slash \(`/`\) at the end of the address. For example:
-
-```diff
-+ "site_url": "https://openlist.example.com",
-- "site_url": "https://openlist.example.com/",
-```
-
-:::
-::: zh-CN
你的网站 URL,比如 `https://pan.example.com`,这个地址会在程序中的某些地方使用,如果不设置这个字段,一些功能可能无法正常工作,比如
- 本地存储的缩略图
@@ -224,26 +179,14 @@ URL 链接结尾请勿携带 `/`,参照如下示例,否则也将无法使用
- "site_url": "https://openlist.example.com/",
```
-:::
-
### cdn
-::: en
-The address of the CDN. Included `$version` values will be dynamically replaced by the version of OpenList. Existing dist resources are hosted on both npm and GitHub, which can be found at:
-:::
-::: zh-CN
CDN 地址,如果要使用 CDN,可以设置该字段,`$version` 会被动态替换为 `Openlist-Frontend` 的实际版本。
-:::
-
-
-::: en
-Thus it is possible to use any npm or ~~GitHub~~ CDN path for this field. Do not include the slash `/` at the end of the address. For example:
-:::
-::: zh-CN
所以你可以使用任何 npm 或 ~~GitHub~~ CDN 作为路径,结尾不要携带 `/`,例如:
-:::
- `https://registry.npmmirror.com/@openlist-frontend/openlist-frontend/$version/files/dist`
- `https://unpkg.com/@openlist-frontend/openlist-frontend@$version/dist`
@@ -255,115 +198,14 @@ Thus it is possible to use any npm or ~~GitHub~~ CDN path for this field. Do not
- ~~`https://cdn.jsdelivr.net/gh/OpenListTeam/OpenList-Frontend@$version/dist`~~
- ~~`https://jsd.onmicrosoft.cn/gh/OpenListTeam/OpenList-Frontend@$version/dist`~~
-::: en
-::: tip
-If you are using the lite version, please add `/lite` to the end of the URL. For example: `https://cdn.jsdelivr.net/gh/OpenListTeam/OpenList-Frontend@$version/dist/lite`
-:::
-::: zh-CN
::: tip
如果您使用 Lite 版本,请在地址后面添加 `/lite` 目录,如:`https://cdn.jsdelivr.net/npm/@openlist-frontend/openlist-frontend@$version/dist/lite`。
:::
-::: en
-Keep empty to use dist resources embedded in the program by default.
-:::
-::: zh-CN
默认情况下,您可以将其设置为空以使用程序内置 dist。
-:::
-
-#### CDN for Beta version { lang="en" }
-
-#### Beta 版本使用 CDN { lang="zh-CN" }
-
-::: en
-Since the frontend uses Vite for building, the generated JS files use a hash naming strategy. When code changes occur, the built file names change, making `index.html` files from different versions incompatible with each other.
-
-The OpenList backend needs to load `index.html` into memory for processing, including inserting code and modifying variables. If deployed only through Pages with modified API addresses, it would result in missing functionality and routing failures.
-
-To solve this problem, we've added the ability to fetch `index.html` from CDN for Beta versions and self-built versions, ensuring that JS files and `index.html` are properly matched.
-
-- **Release version**: Static resources are loaded through NPM CDN with fixed versions, so there's no need to request from CDN - the built-in `index.html` can be used directly
- - Note: Some NPM CDNs (like npmmirror) may prohibit access to HTML files, but Release versions don't depend on CDN's `index.html`, so they're unaffected
-- **Beta version**: Updates frequently, OpenListTeam doesn't upload to NPM, and no CDN is provided for Beta versions
-
-Since Beta versions don't have NPM CDN provided by OpenListTeam, you need to deploy it yourself:
-
-1. **Deploy frontend build artifacts**
- - Deploy build artifacts to a CDN platform (you can use Cloudflare Pages, EdgeOne Pages, etc.)
- - Configure necessary CORS headers, for example of `edgeone.json`:
-
- ```json
- {
- "headers": [
- {
- "source": "/*",
- "headers": [
- {
- "key": "Access-Control-Allow-Origin",
- "value": "*"
- },
- {
- "key": "Access-Control-Allow-Methods",
- "value": "GET, OPTIONS"
- },
- {
- "key": "Access-Control-Allow-Headers",
- "value": "Content-Type"
- }
- ]
- },
- {
- "source": "/**/*.mjs",
- "headers": [
- {
- "key": "Content-Type",
- "value": "application/javascript"
- }
- ]
- }
- ]
- }
- ```
-
- - Recommend using "copy + overwrite" deployment method, retaining old version resource files to ensure compatibility for versions not rebooted
-
-2. **Configure backend**
- - Add CDN configuration in `config.json`
- - The program will automatically fetch the latest `index.html` from CDN when starting
-
-3. **Version updates**
- - When you need to update the frontend, simply restart the backend program
-
-Here's a diagram for better understanding:
-```mermaid
-flowchart TD
- A[Program Initialization] --> B{CDN Configured?}
-
- B -->|Yes| D{Version Type?}
- B -->|No| E{Local dist_dir Configured?}
-
- E -->|No| F[Use Built-in index.html]
- E -->|Yes| G[Use index.html from Local dist_dir]
-
- D -->|Beta Version| H[Fetch index.html from CDN]
- D -->|Release Version| F
-
- H --> I{CDN Fetch Successful?}
- I -->|Success| J[Use CDN-fetched index.html]
- I -->|Failed| K[Resty Retry 3 Times]
- K -->|Success| J
- K -->|Still Failed| L[Program Exit, Wait for Restart]
+#### Beta 版本使用 CDN
- F --> M[Replace CDN, Site Info and Other Variables]
- G --> M
- J --> M
- M --> N[Return Page]
-```
-
-:::
-
-::: zh-CN
由于前端采用 Vite 构建,生成的 JS 文件使用哈希命名策略。当代码发生变更时,构建后的文件名会改变,这导致不同版本间的 `index.html` 文件无法互相兼容。
OpenList 后端需要将 `index.html` 加载到内存中进行处理,包括插入代码、修改变量等操作。如果仅通过 Pages 部署并修改 API 地址,会导致功能缺失和路由失效。
@@ -450,53 +292,16 @@ flowchart TD
M --> N[返回页面]
```
-:::
-
### jwt_secret
-::: en
-The secret used to sign the JWT token, randomly generated on first run.
-
-:::
-::: zh-CN
用于签署 JWT 令牌的密钥,第一次启动时随机生成。
-:::
-
### token_expires_in
-::: en
-User login expiration time, in hours.
-:::
-::: zh-CN
用户登录过期时间,单位:小时
-:::
### database
-::: en
-The database configuration, which is by default `sqlite3`. Available options are `sqlite3`, `mysql` and `postgres`.
-
-- The database options do not need to be modified if using `sqlite3`.
-
-```json
- "database": {
- "type": "sqlite3", //database type
- "host": "", //database host
- "port": 0, //database port
- "user": "", //database account
- "password": "", //database password
- "name": "", //database name
- "db_file": "data\\data.db", //Database location, used by sqlite3
- "table_prefix": "x_", //database table name prefix
- "ssl_mode": "", //To control the encryption options during the SSL handshake, the parameters can be searched by themselves, or check the answer from ChatGPT below
- "dsn": "" // https://github.com/alist-org/alist/pull/6031
- },
-```
-
-:::
-
-::: zh-CN
数据库配置,默认是 `sqlite3`,也可以使用 `mysql` 或者 `postgres`。
- 如果不使用 `MySQL` 或者 `postgres`,配置文件数据库选项不用修改
@@ -516,30 +321,6 @@ The database configuration, which is by default `sqlite3`. Available options are
},
```
-:::
-
-::: en
-::: details Expand to view details of `ssl_mode`
-If you don't know how to fill it in, then your server probably doesn't have SSL enabled, so just leave it blank.
-In MySQL, the `ssl_mode` parameter is used to specify the authentication mode of the SSL connection. Here are a few common options:
-
-- `DISABLED`: Disable SSL connections.
-- `PREFERRED`: Use an SSL connection if server has SSL enabled, and otherwise fallback to a normal connection.
-- `REQUIRED`: Force to use SSL connection and fail if the server does not support SSL connection.
-- `VERIFY_CA`: Force to use SSL connection and verify the authenticity of the server certificate.
-- `VERIFY_IDENTITY`: Force to use an SSL connection and verify the authenticity of the server certificate and that the name matches the connecting hostname.
- Additional, MySQL 5.x and 8.x have differences. If you are using databases provided by service providers, BTFM. If you deployed the database yourself, STFW.
- In PostgreSQL, the `ssl_mode` parameter is used to specify how the client uses SSL connections. Here are a few common options:
-- `disable`: Disable SSL connections.
-- `allow`: Allow SSL connections.
-- `prefer`: Use an SSL connection if server has SSL enabled, and otherwise fallback to a normal connection.
-- `require`: Force to use SSL connection and fail if the server does not support SSL connection.
-- `verify-ca`: Force to use SSL connection and verify the authenticity of the server certificate.
-- `verify-full`: Force to use an SSL connection and verify the authenticity of the server certificate and that the name matches the connecting hostname.
-
-:::
-
-::: zh-CN
::: details 展开查看 `ssl_mode` 参数选项
如果不知道如何填,那你的服务器应该也并没有开启SSL,留空即可。
在 MySQL 中,`ssl_mode` 参数是用于指定 SSL 连接的验证模式。以下是几种常见的选项:
@@ -564,16 +345,6 @@ In MySQL, the `ssl_mode` parameter is used to specify the authentication mode of
:::
-::: en
-::: details Notes on modifying the database when there is already data
-
-1. If you change the `sqlite` database to `mysql` database, it is first recommended to use the backup and recovery method.
-2. If you directly import `sqlite` data into `mysql`, you can view this video tutorial: [View tutorial](https://www.bilibili.com/video/BV1iV4y1T7kh)
- - Because when directly importing the cloud disk database table, the time of `sqlite` and the time of `mysql` are filled in differently, an error will be reported [please check the precautions and how to solve it](https://www.bilibili.com/video/BV1iV4y1T7kh?t=343.7)
-
-:::
-
-::: zh-CN
::: details 已有数据情况下修改数据库注意事项
1. 如果将`sqlite`数据库改为`mysql`数据库优先推荐使用备份再恢复的方法
@@ -584,23 +355,6 @@ In MySQL, the `ssl_mode` parameter is used to specify the authentication mode of
### meilisearch
-::: en
-
-```json
- "meilisearch": {
- "host": "http://localhost:7700", // meilisearch host, the default is the local machine
- "api_key": "", // if meilisearch's authentication is enabled, this is required
- "index": "" // meilisearch index uid
- },
-```
-
-- Documentation link:
-- Reference Links:
-
-:::
-
-::: zh-CN
-
```json
"meilisearch": {
"host": "http://localhost:7700", // meilisearch主机,默认使用的是本机
@@ -612,32 +366,8 @@ In MySQL, the `ssl_mode` parameter is used to specify the authentication mode of
- 文档链接:
- 参考链接:
-:::
-
### scheme
-::: en
-The configuration of scheme. Set this field if using HTTPS.
-
-- Remember to copy the certificate file to the data directory. Config example:
-
-```json
- "scheme": {
- "address": "0.0.0.0", // The http/https address to listen on, default `0.0.0.0`
- "http_port": 5244, // The http port to listen on, default `5244`, if you want to disable http, set it to `-1`
- "https_port": -1, // The https port to listen on, default `-1`, if you want to enable https, set it to non `-1`
- "force_https": false, // Whether the HTTPS protocol is forcibly, if it is set to True, the user can only access the website through HTTPS
- "cert_file": "data\\cert.crt", // Path of cert file
- "key_file": "data\\key.key", // Path of key file
- "unix_file": "", // Unix socket file path to listen on, default empty, if you want to use unix socket, set it to non empty
- "unix_file_perm": "", // Unix socket file permission, set to the appropriate permissions
- "enable_h2c": false // Support HTTP/2 Cleartext (H2C) protocol for openlist's http service. The cleartext HTTP/2 protocol supports nginx's grpc_pass after it is enabled - https://github.com/AlistGo/alist/pull/8294
- },
-```
-
-:::
-
-::: zh-CN
协议配置,如果要使用 HTTPS,可以设置该字段。
- 填写示例:记得把证书文件丢到 data 目录里面才会识别到喔~
@@ -656,49 +386,20 @@ The configuration of scheme. Set this field if using HTTPS.
},
```
-:::
-
### temp_dir
-::: en
-The directory to keep temporary files. By default OpenList uses `data/temp`.
-:::
-::: zh-CN
用于存放临时文件的目录。默认情况下,OpenList 使用 `data/temp`。
-:::
-
-::: en
-::: danger
-temp_dir is a temporary folder exclusive to alist. In order to prevent OpenList from generating garbage files when being interrupted, the directory will be cleared every time OpenList starts, so do not store anything in this directory or map this directory & subdirectories to directories in use when using Docker.
-:::
-::: zh-CN
::: danger
temp_dir 为 OpenList 独占的临时文件夹,为避免程序中断产生垃圾文件会在每次启动时清空,故请不要手动在此文件夹内放置任何内容,也不要在使用 docker 时将此文件夹及其子文件夹映射至正在使用的文件夹。
:::
### bleve_dir
-::: en
-Where data is stored when using **`bleve`** index.
-:::
-::: zh-CN
你使用 **`bleve`** 索引时,数据存放的位置
-:::
### dist_dir
-::: en
-If this option is set, the front-end files in the defined **local** external folder will be used as a priority.
-
-- Supports using front-end files from an external folder
-- Supports using other front-end files, while the back-end continues to use the original version of the application
-
-Upload the front-end files (dist) to the application's `data` folder, then fill in:
-
-:::
-
-::: zh-CN
如果设置此项,优先使用定义的**本地**外部文件夹下的前端文件。
- 支持使用外部文件夹中的前端文件
@@ -706,62 +407,12 @@ Upload the front-end files (dist) to the application's `data` folder, then fill
将前端文件(dist)上传到应用的 `data` 文件夹下,然后填写:
-:::
-
```json
"dist_dir": "data/dist",
```
### log
-::: en
-The log configuration. Set this field to save detailed logs of disable.
-
-```json
- "log": {
- "enable": true, // Whether OpenList should store logs
- "name": "data\\log\\log.log", // The path and name of the log file
- "max_size": 10, // the maximum size of a single log file, in MB. After reaching the specified size, the file will be automatically split.
- "max_backups": 5, // the number of log backups to keep. Old backups will be deleted automatically when the limit is exceeded.
- "max_age": 28, // The maximum number of days preserved in the log file, the log file that exceeds the number of days will be deleted
- "compress": false, // Whether to enable log file compression functions. After compression, the file size can be reduced, but you need to decompress when viewing, and the default is to close the state false
- "filter": { // skip some logs output, not enable by default
- "enable": false,
- "filters": [ // preset example
- {
- "cidr": "",
- "path": "/ping", // Health check
- "method": ""
- },
- {
- "cidr": "",
- "path": "",
- "method": "HEAD" // HEAD request
- },
- { // WebDav metadata
- "cidr": "",
- "path": "/dav/",
- "method": "PROPFIND"
- }
- ]
- },
-```
-
-Each filter acts as the following object:
-
-```json
-{
- "cidr": "",
- "path": "", // http path, If it starts with "/", it is an absolute path; if it does not start with "/", it is a relative path
- "method": "" // HTTP/webdav method, in uppercase
-}
-```
-
-Take note of the startup log to confirm the load, as detailed in the source code `server/middlewares/filtered_logger.go`.
-
-:::
-
-::: zh-CN
日志配置,如果要查看详细日志(或禁用它),可以设置该字段。
```json
@@ -807,24 +458,8 @@ Take note of the startup log to confirm the load, as detailed in the source code
注意查看启动日志以确认加载情况,具体实现详见源代码 `server/middlewares/filtered_logger.go`.
-:::
-
### delayed_start
-::: en
-
-Whether to delay OpenList startup.
-
-
-
-**Time unit: second**
-
-Generally this option is used when OpenList is configured to auto-start. The reason is that sometimes network takes some time to connect, so drivers requiring cannot start correctly after OpenList starts.
-
-:::
-
-::: zh-CN
-
是否延时启动,一般此功能常用于 OpenList 开机自启动选项。
@@ -833,126 +468,27 @@ Generally this option is used when OpenList is configured to auto-start. The rea
因为有时候网络连接的慢,导致 OpenList 启动过快后需要网络连接的驱动无法连接导致无法正常打开。
-:::
-
### max_connections
-::: en
-The maximum amount of connections at the same time. The default is 0, which is unlimited.
-
-- 10 or 20 is recommended for general devices such as N1(S905D).
-- Usage Scenarios: the device will crash if the device is bad at concurrency when picture mode is enabled.
-
-:::
-
-::: zh-CN
同时连接的最大数量。默认值为 0,表示无限制。
- 对于性能一般的设备,如 N1(S905D),推荐设置为 10 或 20。
- 使用场景:当启用图片模式时,如果设备的并发能力较差,设备可能会崩溃。
-:::
-
### max_concurrency
-::: en
-Limit the maximum concurrency of local agents. The default value is 64, and 0 means no limit.
-:::
-
-::: zh-CN
限制本地代理的最大并发,默认为64,0为不限制。
-:::
### tls_insecure_skip_verify
-::: en
-Whether not to verify the SSL certificate.
-
-If there is a problem with the certificate of the website used when this option is not enabled (such as not including the intermediate certificate, having the certificate expired, or forging the certificate, etc.), the service will not be available.
-
-When this option is enabled, please ensure the program is running in a safe network environment.
-:::
-
-::: zh-CN
是否不验证 SSL 证书。
如果在未启用此选项时使用的网站证书存在问题(如未包含中间证书、证书过期或证书伪造等),服务将无法使用。
启用此选项时,请确保在安全的网络环境中运行程序。
-:::
### tasks
-::: en
-Configuration for background task threads.
-
-```json
- "tasks": {
- "download": {
- "workers": 5,
- "max_retry": 1,
- "task_persistant": false
- },
- "transfer": {
- "workers": 5,
- "max_retry": 2,
- "task_persistant": false
- },
- "upload": {
- "workers": 5,
- "max_retry": 0,
- "task_persistant": false
- },
- "copy": {
- "workers": 5,
- "max_retry": 2,
- "task_persistant": false
- },
- "decompress": {
- "workers": 5,
- "max_retry": 2,
- "task_persistant": false
- },
- "decompress_upload": {
- "workers": 5,
- "max_retry": 2,
- "task_persistant": false
- },
- "allow_retry_canceled": false
- },
-```
-
-- **workers**: Number of task threads.
-- **max_retry**: Number of retries.
- - 0: Retries disabled.
-- **download**: Download task when downloading offline
-- **transfer**: upload transfer task after offline download is completed
-- **upload**: upload task
-- **copy**: copy the task
-- **decompress**:decompress the task
-- **decompress_upload**:decompress upload the task
-- **task_persistant**:The task is persistent and will not be cancelled after restarting `OpenList`
- - **download**:false
- - **transfer**:false
- - **upload**:false
- - **copy**:false
- - **decompress**:false
- - **decompress_upload**:false
-- **allow_retry_canceled**:Allow users to retry previously canceled tasks
-
----
-
-A new **transmission** configuration path is added to the background configuration: `/@manage/settings/traffic`
-
-- Supports limiting the number of threads and transmission uplink and downlink rates of **6 tasks**
-- ****
- Operation principle: If `settings/traffic` does not have a thread number field (first run or just upgraded from an old version), `settings/traffic` will be initialized with the value of the config configuration file. If `settings/traffic` has a value, the thread configuration information of config will be ignored
-- ****
-- Summary: For newly installed or upgraded versions, the values will be read from the configuration file to initialize the `traffic` configuration information. Subsequent modifications to the thread only need to be modified in the background.
-
-:::
-
-::: zh-CN
后台任务线程数量配置。
```json
@@ -1019,35 +555,8 @@ A new **transmission** configuration path is added to the background configurati
- ****
- 总结:新安装或者新升级的版本,会先从配置文件读取数值来初始化 `传输` 配置信息,后续修改线程只需要在后台修改就可以
-:::
-
### cors
-::: en
-Configuration for Cross-Origin Resource Sharing (CORS).
-
-```json
- "cors": {
- "allow_origins": [
- "*"
- ],
- "allow_methods": [
- "*"
- ],
- "allow_headers": [
- "*"
- ]
- }
-```
-
-- **allow_origins**: Allowed sources.
-- **allow_methods**: Allowed request methods.
-- **allow_headers**: Allowed request headers.
-
-Use it to understand it by yourself, and then configure it. If you do n’t know, please do n’t modify it at will. Use the default configuration.
-:::
-
-::: zh-CN
**跨源资源共享**配置
```json
@@ -1069,30 +578,9 @@ Use it to understand it by yourself, and then configure it. If you do n’t know
- **allow_headers**:允许的请求头
具体使用方式自行了解进行配置,如果不了解请勿随意修改,使用默认配置就可以。
-:::
### S3
-::: en
-
-```json
- "s3": {
- "enable": false,
- "port": 5246,
- "ssl": false
- }
-```
-
-- `enable`:Whether the S3 function is enabled, the default is not enabled
-- `port`:port
-- `SSL`:Enable the HTTPS certificate, not enabled by default
-
-Function introduction: [Click to view](../guide/advanced/s3.md)
-
-:::
-
-::: zh-CN
-
```json
"s3": {
"enable": false,
@@ -1107,43 +595,8 @@ Function introduction: [Click to view](../guide/advanced/s3.md)
功能介绍:[点击查看](../guide/advanced/s3.md)
-:::
-
### ftp
-::: en
-
-```json
- "ftp": {
- "enable": false,
- "listen": ":5221",
- "find_pasv_port_attempts": 50,
- "active_transfer_port_non_20": false,
- "idle_timeout": 900,
- "connection_timeout": 30,
- "disable_active_mode": false,
- "default_transfer_binary": false,
- "enable_active_conn_ip_check": true,
- "enable_pasv_conn_ip_check": true
- },
-```
-
-- `enable`: Whether the **ftp** function is enabled, not enabled by default
-- `listen`: port number
-- `find_pasv_port_attempts`: maximum number of attempts to re-find a port due to port conflicts during passive transmission
-- `active_transfer_port_non_20`: enable ports other than 20 as active transmission ports
-- `idle_timeout`: maximum idle time (seconds) when there is no client request
-- `connection_timeout`: connection timeout
-- `disable_active_mode`: disable active transmission mode
-- `default_transfer_binary`: transfer in binary mode by default
-- `enable_active_conn_ip_check`: perform IP check on the client side of the TCP connection of the data stream in active transmission mode
-- `enable_pasv_conn_ip_check`: perform IP check on the client side of the TCP connection of the data stream in passive transmission mode
-
-Other instructions: [Click to view](../guide/advanced/ftp.md)
-:::
-
-::: zh-CN
-
```json
"ftp": {
"enable": false,
@@ -1171,27 +624,9 @@ Other instructions: [Click to view](../guide/advanced/ftp.md)
- `enable_pasv_conn_ip_check`:被动传输模式下对数据流TCP连接的客户端进行IP检查
其它说明:[点击查看](../guide/advanced/ftp.md)
-:::
### sftp
-::: en
-
-```json
- "sftp": {
- "enable": false,
- "listen": ":5222"
- }
-```
-
-- `enable`: Whether the **sftp** function is enabled, not enabled by default
-- `listen`: port number
-
-Other instructions: [Click to view](../guide/advanced/ftp.md)
-:::
-
-::: zh-CN
-
```json
"sftp": {
"enable": false,
@@ -1203,25 +638,9 @@ Other instructions: [Click to view](../guide/advanced/ftp.md)
- `listen`:端口号
其它说明:[点击查看](../guide/advanced/ftp.md)
-:::
### mcp
-::: en
-
-```json
- "mcp": {
- "enable": false
- }
-```
-
-- `enable`: Whether the **MCP** endpoint is enabled, not enabled by default
-
-Other instructions: [Click to view](../guide/advanced/mcp.md)
-:::
-
-::: zh-CN
-
```json
"mcp": {
"enable": false
@@ -1231,24 +650,9 @@ Other instructions: [Click to view](../guide/advanced/mcp.md)
- `enable`:**MCP** 功能是否启用,默认未启用
其它说明:[点击查看](../guide/advanced/mcp.md)
-:::
### proxy
-::: en
-
-```json
- "proxy_address": "",
-```
-
-Supports HTTP proxy, HTTPS proxy, SOCKS4 proxy, SOCKS5 proxy, SOCKS5HOSTNAME proxy.
-
-Both IPv4 and IPv6 are supported.
-
-:::
-
-::: zh-CN
-
```json
"proxy_address": "",
```
@@ -1256,5 +660,3 @@ Both IPv4 and IPv6 are supported.
支持HTTP代理、HTTPS代理、SOCKS4代理、SOCKS5代理、SOCKS5HOSTNAME代理。
同时兼容IPv4和IPv6。
-
-:::
diff --git a/pages/configuration/global.md b/pages/configuration/global.md
index 4f20eba27..c48d3509b 100644
--- a/pages/configuration/global.md
+++ b/pages/configuration/global.md
@@ -1,31 +1,13 @@
---
-title:
- en: Global Configuration
- zh-CN: 全局设置
-# This is the icon of the page
-icon: iconfont icon-chrome
-# This control sidebar order
-# A page can have multiple categories
categories:
- configuration
-# A page can have multiple tags
top: 20
---
-## Hide files { lang="en" }
+# 全局设置
-## 隐藏文件 { lang="zh-CN" }
+## 隐藏文件
-::: en
-Match files hidden by a regular expression (`JavaScript`). Please do not fill it in casually, as incorrect expressions may cause the front-end page to crash.
-
-One regular expression per line.
-
-By default, there is an expression `/\/README.md/i`, which hides `README.md` from all directories.
-
-Note that this is not a true hide. The file will still appear in the API response list, but will not be displayed in the front-end interface. If you wish to truly hide the file, please refer to [metadata](../guide/advanced/meta.md).
-:::
-::: zh-CN
匹配由正则表达式(`JavaScript`)隐藏的文件。请勿随意填写,错误的表达式可能会导致前端页面崩溃。
每行填写一个正则表达式。
@@ -33,95 +15,34 @@ Note that this is not a true hide. The file will still appear in the API respons
默认情况下,已有一个表达式 `/\/README.md/i`,表示将 `README.md` 从所有目录中隐藏。
需要注意的是,这并不是真正的隐藏。该文件仍会出现在 API 返回的文件列表中,只是不显示在前端界面中。如果您想彻底隐藏文件,请参考[元信息](../guide/advanced/meta.md)。
-:::
-
-## Package download { lang="en" }
-
-## 打包下载 { lang="zh-CN" }
-::: en
-Whether to enable package download (default is true). **Not recommended, especially for large or numerous files.**
+## 打包下载
-- It is recommended to push files to Aria2 for downloading, as it supports maintaining the directory structure when saving the download folder.
-- For more details, see [What is the difference between the two Aria2](./other.md#other).
-
-:::
-::: zh-CN
是否开启前端文件打包下载(默认为开启)。**不推荐使用,尤其是文件数量多或体积大的情况。**
- 推荐将文件推送至 Aria2 进行下载,它支持在保存下载文件夹时保留目录结构。
- 了解详情,请查看 [两个 Aria2 的区别](./other.md#其他)。
-:::
-
-## Customize head { lang="en" }
-
-## 自定义头部 { lang="zh-CN" }
-
-::: en
-The content set here will be automatically inserted into the header of the webpage (not include the manage pages). You can reference scripts, CSS, etc., here to style the frontend of OpenList.
-
-- How to configure PWA(Desktop、Android、IOS):**[alist/issues/6724](https://github.com/alist-org/alist/issues/6724#issuecomment-2220251541)**
+## 自定义头部
-:::
-::: zh-CN
在此处设置的内容会自动插入到网页头部位置(管理页面除外)。您可以在此处引用脚本、CSS等,对 OpenList 的前端进行美化。
- 如何配置PWA(Desktop、Android、IOS):**[alist/issues/6724](https://github.com/alist-org/alist/issues/6724#issuecomment-2220251541)**
-:::
-
-## Customize body { lang="en" }
-
-## 自定义内容 { lang="zh-CN" }
+## 自定义内容
-::: en
-The content set here will be automatically inserted at the end of the webpage body. You can add icp information, visit statistics, etc., here.
-:::
-::: zh-CN
在此处设置的内容会自动插入到网页正文的末尾。您可以在此处添加备案信息、访问统计等。
-:::
-
-## Link expiration { lang="en" }
-## 直链有效期 { lang="zh-CN" }
+## 直链有效期
-::: en
-The expiration time of the direct link, in hours. If it equals 0, it will not expire. Default is 0.
-::: en
-::: warning
-Only the straight chain of the path with the password added will have an expiration time, otherwise it will not expire.Because the expiration time is added to the sign query parameter, and the path without adding the password will not check the sign.
-:::
-
-::: zh-CN
直接链接的过期时间,以小时为单位。如果为 0,则不会过期。默认值为 0。
-::: zh-CN
+
::: warning
只有加了密码的路径的直链才会有过期时间,否则不会过期。因为过期时间是加到sign查询参数中的,没有加密码的路径是不会检查sign的。
:::
-## Sign all { lang="en" }
-
-## 签名所有 { lang="zh-CN" }
-
-::: en
-Add signatures to the direct link of all files (whether with password or not), such as `https://xxxx.com/d/xx?sign=vUQ5KFXnwMseKnIUXGRcfoG3cEHzKFBiPGp1NriMDXA=:0`.
+## 签名所有
-If you need to close it, you can close it yourself, but you need to pay attention to security issues. After closing the signature, if the site can be accessed by the public network, the password may be bypassed to access private files.
-There are two other methods that also carry the `sign?xxx` parameter:
-
-1. Add Storage Select `Enable Signing`
-2. Meta Information Add Password
-
-The scope of the three methods: `Sign All` > `Meta Information Add Password` > Add Storage Select `Enable Signing`
-
-1. Sign All: If this option is turned on, the sign parameter will be carried regardless of whether meta-information is encrypted or not, and whether `Enable Signing` is checked when adding storage.
-2. Meta Information Add Password:Only files under this meta information path will carry the sign parameter.
- - If **Apply to sub folder** is turned on, all files in this path will carry the sign parameter
-3. Add Storage Select `Enable Signing`:Only this storage driver carries the sign parameter.
-
-:::
-::: zh-CN
向所有文件的直接链接添加签名(无论是否有密码),即 `https://openlist.example.com/d/xx?sign=vUQ5KFXnwMseKnIUXGRcfoG3cEHzKFBiPGp1NriMDXA=:0`。
若需要关闭,自行关闭即可,但需要注意安全问题。关闭签名后若站点能被公网访问,可能会被绕过密码访问私人文件。
@@ -138,112 +59,36 @@ The scope of the three methods: `Sign All` > `Meta Information Add Password` > A
- 如果**应用到子文件夹**开启,则该路径下的所有文件将携带该签名参数
3. 添加存储勾选`启用签名`:单独只这个存储驱动携带 sign 参数
-:::
-
-## Privacy regs { lang="en" }
+## 隐私内容正则表达式
-## 隐私内容正则表达式 { lang="zh-CN" }
-
-::: en
-What you don't want to show in the error message, One regular expression (in `Golang`) per line. The matched content will be replaced with `*` of the corresponding length.
-:::
-::: zh-CN
不想在错误消息中显示的内容,每行一个正则表达式(在 `Golang` 中)。匹配的内容将被替换为对应长度的`*`。
-:::
-
-## Ocr api { lang="en" }
-
-## Ocr 接口 { lang="zh-CN" }
-
-::: en
-Used to identify verification codes. You can deploy yourself: https://hub.docker.com/r/cloudlinksu/openlist-ocr-server.
-The default ocr api is deployed on the [Hugging Face](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main). You can clone the Hugging Face repository to build your own: [clone the Hugging Face repository](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main?duplicate=true).
+## Ocr 接口
-The hf domain name after successful self-construction is `https://{username}-{repositroy-name}.hf.space/ocr/file/json`.
-:::
-::: zh-CN
用于识别验证码。你可以自己部署:https://hub.docker.com/r/cloudlinksu/openlist-ocr-server。
默认的 ocr api 部署在 [Hugging Face](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main) 上。你可克隆 Hugging Face 仓库自建:[克隆Hugging Face仓库](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main?duplicate=true)。
自建成功后的 hf 域名为:`https://{username}-{repositroy-name}.hf.space/ocr/file/json`
-:::
-## Filename char mapping { lang="en" }
+## 文件名字符映射
-## 文件名字符映射 { lang="zh-CN" }
-
-::: en
-Map certain special characters, such as `/`, which is used as a path separator in OpenList. When file names contain `/`, it may cause issues like broken file paths or inability to view the files. By using this method, we can map and convert these characters to resolve such problems.
-:::
-::: zh-CN
映射一些特殊符号,例如 /,在 OpenList 中作为路径符号。由于某些文件名包含 /,可能会导致文件路径断开或无法查看等问题。通过这种方式,我们可以进行符号映射和转换,以解决此类问题。
-:::
```json
{ "/": "|", "xx1": "xx1", "xx2": "xx2" }
```
-## Forward direct link params { lang="en" }
-
-## 转发直链参数 { lang="zh-CN" }
+## 转发直链参数
-::: en
-After enabling, the parameters after `?` will be automatically appended to the end of the direct link URL.
-:::
-::: zh-CN
开启后,`?`后面的参数将自动添加到直链 URL 的末尾。
-:::
-
-## Ignore direct link params { lang="en" }
-## 忽略直链参数 { lang="zh-CN" }
+## 忽略直链参数
-::: en
-Ignore the parameters for forwarding direct links, such as `sign` and `openlist_ts`.
-:::
-::: zh-CN
忽略转发直链的参数,如 `sign,openlist_ts`。
-:::
-
-## Webauthn login enabled { lang="en" }
-
-## 启用 Webauthn 登录 { lang="zh-CN" }
-::: en
-**Web Authentication (WebAuthn)** is a new authentication method. You can enable it by following these steps:
+## 启用 Webauthn 登录
-1. **Enable WebAuthn Feature**: Go to the admin panel, navigate to `Settings` → `Global`, and enable the option `Enable WebAuthn Login`.
-2. **Bind WebAuthn Credentials**: Go to the `Profile` page in the admin panel and click `Add WebAuthn Credential` to bind your credentials.
-
- Supported authentication methods:
- - Local PIN code
- - Companion devices (e.g., smart bands, smartwatches)
- - Windows Hello options (e.g., facial recognition, fingerprint recognition)
-
-3. **Log in with WebAuthn**: After binding, you can log in using WebAuthn:
- - On the login page, click the login button on the far right.
- - Enter your username.
- - Click login.
- - Follow the prompts to complete WebAuthn verification (unlock the respective authentication method).
-
-::: tip WebAuthn only supports secure origins.
-
-**Supported environments:**
-
-- Websites with `https://` protocol
-- Localhost environment (`localhost`)
-
-**Unsupported environments:**
-
-- `http://` protocol
-- Local network IPs (e.g., `192.168.x.x`)
-- Local IPs (e.g., `127.0.0.1`)
-- Direct access via server IP
-
-:::
-::: zh-CN
**Web Authentication (WebAuthn)** 是一套新的身份验证方法。您可以按照以下步骤启用:
1. **启用 WebAuthn 功能**:进入后台`设置` → `全局`,开启`启用 Webauthn 登录`选项
@@ -276,76 +121,24 @@ Ignore the parameters for forwarding direct links, such as `sign` and `openlist_
:::
-## Allow previewing sharing files { lang="en" }
-
-## 允许预览分享文件 { lang="zh-CN" }
+## 允许预览分享文件
-::: en
-Enable the preview feature for files in share links.
-
-Please note that disabling this option will only hide preview methods (except Download) on the frontend, but cannot prevent users from invoking the relevant APIs.
-:::
-::: zh-CN
允许分享链接中文件的预览功能。
请注意:关闭该选项只会让前端不显示除 Download 以外的预览方式,并不能阻止用户调用相关 API。
-:::
-## Allow previewing sharing archives { lang="en" }
+## 允许预览分享的压缩文件
-## 允许预览分享的压缩文件 { lang="zh-CN" }
-
-::: en
-Enable the preview feature for archives in share links.
-
-Unlike the previous setting, disabling this option will prevent calls to the archive preview APIs for files in share links.
-:::
-::: zh-CN
允许分享链接中压缩文件的预览功能。
与上一项配置不同,关闭该选项会拦截对分享链接中压缩文件的预览相关请求。
-:::
-## Force proxy sharing files { lang="en" }
+## 强制代理分享文件链接
-## 强制代理分享文件链接 { lang="zh-CN" }
-
-::: en
-Enforce proxying for all file requests originating from share links.
-:::
-::: zh-CN
强制代理所有来自分享链接的文件请求
-:::
-
-## Share summary content { lang="en" }
-
-## 分享链接复制内容 { lang="zh-CN" }
-
-::: en
-The content copied by clicking "Copy Link" after sharing completion, coding in Handlebars template syntax.
-
-If you prefer copying the accessible link directly, try:
-
-- Preview link
-
-```handlebars
-{{base_url}}/@s/{{id}}
-```
-
-- Preview link with share code
-```handlebars
-{{base_url}}/@s/{{id}}{{#if pwd}}?pwd={{pwd}}{{/if}}
-```
+## 分享链接复制内容
-- direct download link (applies only to single-file shares)
-
-```handlebars
-{{base_url}}/sd/{{id}}{{#if pwd}}?pwd={{pwd}}{{/if}}
-```
-
-:::
-::: zh-CN
分享完成后点击“复制链接”复制的内容,使用 Handlebars 模板语法,默认内容的中文版:
```handlebars
@@ -386,45 +179,18 @@ If you prefer copying the accessible link directly, try:
{{base_url}}/sd/{{id}}{{#if pwd}}?pwd={{pwd}}{{/if}}
```
-:::
-
-## Handle hook after writing { lang="en" }
-
-## 写入操作后触发目录更新钩子 { lang="zh-CN" }
-
-::: en
-Whether to trigger the directory update hook after operations such as upload, rename, delete, move, copy, or extraction.
+## 写入操作后触发目录更新钩子
-Triggering the directory update hook will cause the index to update and activate the function of the [Strm](/guide/drivers/strm) driver to generate local files.
-:::
-::: zh-CN
上传、重命名、删除、移动、复制、解压操作后,是否触发目录更新钩子。
目录更新钩子触发将导致索引更新及[Strm](/guide/drivers/strm)驱动生成本地文件的功能触发。
-:::
-
-## Handle hook rate limit { lang="en" }
-## 目录更新钩子遍历限制速率 { lang="zh-CN" }
+## 目录更新钩子遍历限制速率
-::: en
-It is only meaningful when the [Handle hook after writing](/configuration/global#handle-hook-after-writing) is enabled. When the directory update hook is triggered, this limits the rate at which the driver API is called (unit: times/second; 0 means no restriction).
-:::
-::: zh-CN
仅当[写入操作后触发目录更新钩子](/configuration/global#写入操作后触发目录更新钩子)开启时有意义,触发目录更新钩子时,限制调用驱动 API 的速率(单位:次/秒,为 0 表示不限制)。
-:::
-
-## Ignore system files { lang="en" }
-## 忽略系统文件 { lang="zh-CN" }
+## 忽略系统文件
-::: en
-When enabled, attempts by users to upload certain system files will directly fail, thereby achieving filtering.
-
-The determination of whether a file is a system file is based on its filename.
-:::
-::: zh-CN
开启时,当用户尝试上传某些系统文件时会直接失败,从而实现过滤。
判断是否为系统文件的依据为文件名。
-:::
diff --git a/pages/configuration/index.md b/pages/configuration/index.md
index dd6b8e017..2ca782814 100644
--- a/pages/configuration/index.md
+++ b/pages/configuration/index.md
@@ -1,31 +1,11 @@
----
-title:
- en: Configuration
- zh-CN: 配置
----
+# 配置
---
-::: en
-
-- [Configuration file](./configuration/configuration)
-- [Site settings](./configuration/site)
-- [Style settings](./configuration/style)
-- [Preview settings](./configuration/preview)
-- [Global settings](./configuration/global)
-- [Other settings](./configuration/other)
-- [Side settings](./configuration/side)
-
-:::
-
-::: zh-CN
-
-- [配置文件](./configuration/configuration)
-- [站点设置](./configuration/site)
-- [样式设置](./configuration/style)
-- [预览设置](./configuration/preview)
-- [全局设置](./configuration/global)
-- [其他设置](./configuration/other)
-- [侧边栏设置](./configuration/side)
-
-:::
+- [配置文件](./configuration)
+- [站点设置](./site)
+- [样式设置](./style)
+- [预览设置](./preview)
+- [全局设置](./global)
+- [其他设置](./other)
+- [侧边栏设置](./side)
diff --git a/pages/configuration/other.md b/pages/configuration/other.md
index e7a5c0844..959e013c7 100644
--- a/pages/configuration/other.md
+++ b/pages/configuration/other.md
@@ -1,82 +1,34 @@
---
-title:
- en: Other Configuration
- zh-CN: 其他设置
-# This is the icon of the page
-icon: iconfont icon-snow
categories:
- configuration
-# A page can have multiple tags
top: 10
---
-## Aria2
-
-::: en
-Used for the offline download feature, which downloads an external resource outside of OpenList into the storage managed by OpenList.
-Set Aria2 uri and Aria2 for offline download.
+# 其他设置
-> `Aria2` needs to access the same directory as `OpenList`: `/opt/openlist/data/temp/aria2`. Assuming that both Aria2 and OpenList are independent containers, where OpenList mounts the directory `/etc/openlist/data:/opt/openlist/data`, Aria2 containers need to be additionally mounted under the path `/etc/openlist/data/temp/aria2:/opt/openlist/data/temp/aria2`.
+## Aria2
-:::
-::: zh-CN
这是用于离线下载功能,即:将一个OpenList外部的资源下载到OpenList所管理的存储中。
设置 Aria2 URI 以供离线下载。
> **`Aria2` 需要和`OpenList`访问同一目录: `/opt/openlist/data/temp/aria2`。假设您的Aria2和OpenList都是独立容器,其中OpenList挂载的目录为`/etc/openlist/data:/opt/openlist/data`,则Aria2容器需要额外挂载的`/etc/openlist/data/temp/aria2:/opt/openlist/data/temp/aria2`路径下。**
-:::
-
-### Aria2 地址 { lang="zh-CN" }
-
-### Aria2 uri { lang="en" }
+### Aria2 地址
-::: en
-The Aria2 RPC address used for offline downloading. The default value is: `http://localhost:6800/jsonrpc`.
-:::
-::: zh-CN
用于离线下载的 Aria2 RPC 地址。默认值为:`http://localhost:6800/jsonrpc`。
-:::
-### Aria2 秘钥 { lang="zh-CN" }
+### Aria2 秘钥
-### Aria2 secret { lang="en" }
-
-::: en
-The Aria2 RPC secret key used for offline downloading. The default value is empty.
-:::
-::: zh-CN
用于离线下载的 Aria2 RPC 秘钥。默认值为空。
-:::
## qBittorrent
-::: en
-Used to customize **qBittorrent** parameters to configure the client to use.
-
-The default value is: `http://admin:adminadmin@localhost:8080/`, you can modify it by referring to [specific instructions](../guide/advanced/offline-download.md#qbittorrent)
-:::
-::: zh-CN
用于自定义 **qBittorrent** 参数用来配置客户端中使用。
预设值为:`http://admin:adminadmin@localhost:8080/`,您可以参考 [具体说明](../guide/advanced/offline-download.md#qbittorrent) 进行修改。
-:::
-
-## 115、PikPak、Thunder { lang="en" }
-
-## 115、PikPak、迅雷 { lang="zh-CN" }
-
-::: en
-**You need to add the driver first, and then set the temporary directory in the settings.**
-Allow the use of offline download tools such as 115/PikPak/Thunder in any storage.
+## 115、PikPak、迅雷
-- Files will be downloaded directly to the destination dir if using the tool in 115/PikPak/Thunder storage.
-- Otherwise, files will be downloaded to a user-configured temp dir, and then transfered to the destination dir.
- - For example, on the front-end page of the `GoogleDrive` storage drive, when the `Pikpak offline-download` function is invoked, the file will first be downloaded to the Pikpak temporary folder directory set in the backend. Once the Pikpak offline download is complete, the file will be automatically transferred from Pikpak to `GoogleDrive`.
-
-:::
-::: zh-CN
**需要先添加对应的驱动,然后在后台设置临时目录。**
允许在任意存储使用 115/PikPak/迅雷 等离线下载工具。
@@ -85,36 +37,11 @@ Allow the use of offline download tools such as 115/PikPak/Thunder in any storag
- 否则,文件会下载至用户配置的临时目录中,然后转移至目标目录。
- 例如,在 `GoogleDrive` 存储驱动的前端页面中,调用 `Pikpak offline-download` 功能时,文件会先下载到后台设置的 Pikpak 临时文件夹目录。待 Pikpak 完成离线下载后,文件会自动从 Pikpak 转移到 `GoogleDrive`。
-:::
-
-### Token { lang="en" }
-
-## 令牌 { lang="zh-CN" }
+## 令牌
-::: en
-The token that can be used to access all APIs of the program. Unlike the token obtained after logging in with a username and password, this token is fixed and has no expiration time.
-:::
-::: zh-CN
可用于访问程序所有 API 的令牌。与账号密码登录后获取的不同,此令牌一般固定,且没有失效时间。
-:::
-
-### Other { lang="en" }
-
-### 其他 { lang="zh-CN" }
-::: en
-
-1. When using OpenList, you may notice two Aria2 options. What is the difference between them? [**Click here for detailed explanation**](../faq/why.md#what-is-the-difference-between-the-two-aria2)
-
-2. Supports using Aria2 to download folders while preserving the original directory structure.
- - **Configure Aria2**: Go to the bottom-right corner, click `Settings` → `Aria2 RPC Link` → Enter the `Aria2 RPC Key` (if available).
- - Aria2 will download files locally, so you only need to initiate the download on your local machine. It also supports pushing the download task to another computer, your own server, or other devices in your local network, as long as the target device has Aria2 installed and is connected to either the public internet or the local network.
-
- - **Start downloading**: Check the `Enable checkbox` in the bottom-right corner → Select the files/folders → Click `Download` at the bottom → `Send to Aria2`.
- - **Important notes**: It is recommended not to download too many files at once, such as thousands of folders or tens of thousands of files, as this may cause performance issues.
-
-:::
-::: zh-CN
+### 其他
1. 在使用时发现有两个 Aria2,那它们有什么区别呢?[**点击查看详情说明**](../faq/why.md#两个aria2有什么不同)
2. 支持使用 Aria2 下载文件夹并保持原有目录结构
@@ -123,5 +50,3 @@ The token that can be used to access all APIs of the program. Unlike the token o
- **开启下载**:右下角勾选 `开启复选框` → 选择文件/文件夹 → 点击底部 `下载` → `发送到 Aria2`
- **注意事项**:建议不要一次性下载过多文件,如同时下载上千个文件夹或成千上万个文件,以免导致性能问题。
-
-:::
diff --git a/pages/configuration/preview.md b/pages/configuration/preview.md
index 4bc7f0816..a06b4e037 100644
--- a/pages/configuration/preview.md
+++ b/pages/configuration/preview.md
@@ -1,136 +1,39 @@
---
-title:
- en: Preview Configuration
- zh-CN: 预览设置
-# This is the icon of the page
-icon: iconfont icon-preview
-# This control sidebar order
categories:
- configuration
-# A page can have multiple tags
top: 30
---
-## Text types { lang="en" }
+# 预览设置
-## 文本类型 { lang="zh-CN" }
+## 文本类型
-::: en
-The extensions of the files you want to preview as text, split by `,`, such as `txt,md,go,tsx`.
-:::
-::: zh-CN
要作为文本预览的文件扩展名,用 `,` 分隔,例如 `txt,md,go,tsx`。
-:::
-## Audio types { lang="en" }
+## 音频类型
-## 音频类型 { lang="zh-CN" }
-
-::: en
-The extensions of the files you want to preview as audio, split by `,`, such as `mp3,wav,m4a`.
-:::
-::: zh-CN
要作为音频预览的文件扩展名,以 `,` 分隔,例如 `mp3,wav,m4a`。
-:::
-
-## Video types { lang="en" }
-## 视频类型 { lang="zh-CN" }
+## 视频类型
-::: en
-The extensions of the files you want to preview as video, split by `,`, such as `mp4,webm,ogg`.
-:::
-::: zh-CN
要作为视频预览的文件扩展名,以 `,` 分隔,例如 `mp4,webm,ogg`。
-:::
-
-## Image types { lang="en" }
-## 图片类型 { lang="zh-CN" }
+## 图片类型
-::: en
-The extensions of the files you want to preview as image, split by `,`, such as `jpg,jpeg,png,gif,webp`.
-:::
-::: zh-CN
要作为图像预览的文件扩展名,以 `,` 分隔,例如 `jpg,jpeg,png,gif,webp`。
-:::
-### Proxy types { lang="en" }
+## 代理类型
-## 代理类型 { lang="zh-CN" }
-
-::: en
-The file extensions to be downloaded through the program proxy, split by `,`, such as `m3u8,url`.
-:::
-::: zh-CN
要通过程序代理下载的文件扩展名,以 `,` 分隔,例如 `m3u8,url`。
-:::
-### Proxy ignore headers { lang="en" }
+## 代理忽略头部
-## 代理忽略头部 { lang="zh-CN" }
-
-::: en
-Do not forward request headers, such as `authorization,referer`, when downloading through the program proxy.
-
-This can prevent download failures caused by header parameter leakage.
-:::
-::: zh-CN
当通过程序代理下载时不转发的请求标头,例如 `authorization,referer`。
可以避免请求头参数泄露导致下载失败。
-:::
-
-### External previews { lang="en" }
-
-## 外部预览 { lang="zh-CN" }
-
-::: en
-A json object that contains the external preview settings, It is defined as
-
-```typescript
-interface {
- [extensions: string]: {
- [name: string]: string //(url)
- }
-}
-```
-
-the first key `extensions` is the file extensions separated by `,` (if it starts with `/`, it will be considered a regular expression), and the value is also a `key-value` object, the key is the preview name, and the value is the external url.
-
-For the external URL, we provide some variables for you to use:
-
-Basic variable:
-
-- `$url`: the URL of file, such as `https://openlist.example.com/p/file.pdf`.
-- `$durl`: the direct URL of file, such as `https://oss.example.com/cloud/user/2020/01/01/file.pdf`.
-- `$name`: the file name
-
-Extended variables:
-Add [eb_] before the basic variable, where e means `encodeURIComponent`, b means `base64`, such as:
-
-- `$e_url`: encodeURIComponent($url)
-- `$b_url`: btoa($url)
-- `$eb_url`: encodeURIComponent(btoa($url))
-
-Finally, the `External previews` will displayed a `Open with` menu while current file matched the `extensions`.
-For example, set `External previews` to
-```json
-{
- "txt": {
- "Notepad": "notepad://$url"
- },
- "/.*/": {
- "VSCode": "vscode://$url"
- }
-}
-```
+## 外部预览
-when we enter a file with the extension `txt`, it will show:
-
-:::
-::: zh-CN
一个包含外部预览设置的 json 对象,定义为
```typescript
@@ -174,36 +77,9 @@ interface {
当我们输入一个扩展名为 `txt` 的文件时,它会显示:

-:::
-
-### Iframe previews { lang="en" }
-
-## Iframe 预览 { lang="zh-CN" }
-
-::: en
-Similar to `External previews`, but it will embed an iframe in current page directly.
-
-You need to enter a preview HTML page, and then pass the file address as a parameter to the page using a variable. The available variables are listed in the previous section.
-:::tip
-If you want to use self-deployed OnlyOffice to preview office files, you can add the configuration like this here:
-
-```json
-{
- "doc,docx,xls,xlsx,ppt,pptx": {
- "OnlyOffice": "you_only_office_url"
- }
-}
-```
-
-Deploying and using `OnlyOffice` Reference:
-
-- https://github.com/AlistGo/alist/discussions/3255
-- https://github.com/AlistGo/alist/discussions/8271
-
-:::
+## Iframe 预览
-::: zh-CN
类似于 `外部预览`,但它会直接在当前页面中嵌入 iframe。
您需要填入一个预览的 HTML 网页,然后将文件地址通过变量作为参数传给网页。可以使用的变量见上节。
@@ -227,82 +103,34 @@ Deploying and using `OnlyOffice` Reference:
:::
-### Audio cover { lang="en" }
-
-## 音频封面 { lang="zh-CN" }
+## 音频封面
-::: en
-The default audio cover.
-:::
-::: zh-CN
歌曲无播放封面时显示的默认封面。
-:::
-### Audio autoplay { lang="en" }
+## 自动播放音频
-## 自动播放音频 { lang="zh-CN" }
-
-::: en
-Whether to automatically play audio files.
-:::
-::: zh-CN
是否自动播放音频文件。
-:::
-### Video autoplay { lang="en" }
+## 自动播放视频
-## 自动播放视频 { lang="zh-CN" }
-
-::: en
-Whether to automatically play video files.
-:::
-::: zh-CN
是否自动播放视频文件。
-:::
-
-### Preview archives by default { lang="en" }
-## 默认情况下预览档案 { lang="zh-CN" }
+## 默认情况下预览档案
-::: en
-After enabling this option, compressed files will be previewed by default (as shown in the image below). Although it will consume some server bandwidth, a full download will not occur. If you wish to disable the preview for compressed files, turning off this option will change the default behavior to download mode.
-:::
-::: zh-CN
启用此选项后,默认会对压缩包格式的文件进行预览(如下图所示)。虽然会消耗一些服务器流量,但不会进行完整下载。如果您希望关闭压缩包格式的预览,关闭此选项后,默认行为将改为下载模式。
-:::


-### Readme autorender { lang="en" }
-
-## Readme 自动渲染 { lang="zh-CN" }
+## Readme 自动渲染
-::: en
-After closing, the content of files like readme.md will no longer be automatically rendered.
-
-By default, `readme.md`, `footer.md`, and `bottom.md` will be rendered at the bottom of the file, while `header.md`, `top.md`, and `index.md` will be rendered at the top of the file.
-:::
-::: zh-CN
关闭后,`readme.md` 等文件的内容将不会被自动渲染。
默认情况下,`readme.md`、`footer.md` 和 `bottom.md` 会渲染在文件底部,而 `header.md`、`top.md` 和 `index.md` 会渲染在文件顶部。
-:::
-
-### Filter readme scripts { lang="en" }
-## 过滤 Readme 文件中的脚本 { lang="zh-CN" }
-
-::: en
-Prevent virus script attacks. After turning it on, the contents of `readme.md` will be displayed in text form.
-
-- Including but not limited to strikethrough, tables, task lists, etc. displayed in text form
-- The specific effects are as follows:
- 
+## 过滤 Readme 文件中的脚本
-:::
-::: zh-CN
防止病毒脚本攻击,开启后会以文本形式显示 `readme.md` 内容。
- 包含但不限于 删除线、表格、任务列表等以文本形式展示
@@ -310,29 +138,8 @@ Prevent virus script attacks. After turning it on, the contents of `readme.md` w


-:::
-
-### Force preview { lang="en" }
-
-## 强制预览 { lang="zh-CN" }
-
-::: en
-We can force the preview type through the `type` query parameter.
-
-Available values:
-
-```
-UNKNOWN
-FOLDER
-VIDEO
-AUDIO
-TEXT
-IMAGE
-```
+## 强制预览
-Example: `http://yourdomain/test-file.ahk?type=text`
-:::
-::: zh-CN
可以通过 `type` 请求参数来强制设置预览类型。
可选值:
@@ -347,19 +154,9 @@ IMAGE
```
示例: `http://yourdomain/test-file.ahk?type=text`
-:::
-
-## Specify preview { lang="en" }
-## 指定预览 { lang="zh-CN" }
+## 指定预览
-::: en
-We can specify the preview through the `preview` query parameter. The parameter will be generated when you select a preview in the file page.
-
-Example: `http://yourdomain/test-file.ahk?preview=download`
-:::
-::: zh-CN
可以通过 `preview` 请求参数来指定预览的 `key`。此参数会在文件页面选择预览时生成。
示例: `http://yourdomain/test-file.ahk?preview=download`
-:::
diff --git a/pages/configuration/side.md b/pages/configuration/side.md
index ed62b9ed9..97b1c3c62 100644
--- a/pages/configuration/side.md
+++ b/pages/configuration/side.md
@@ -1,72 +1,11 @@
---
-title:
- en: Side Configuration
- zh-CN: 侧边栏设置
-# This is the icon of the page
-icon: fa-regular fa-sidebar-flip
categories:
- configuration
-# A page can have multiple tags
top: 0
---
-::: en
-We can see a icon on the lower right corner of the homepage. If your computer resolution is very high, the icon is likely to be smaller
-After the expand
+# 侧边栏设置
--
- Refresh
-
- The refresh we mentioned is not to use F5 to refresh the webpage, **but use this icon to refresh**, so that the files that just uploaded to the network disk can be refreshed out.
-
--
- New File
-
--
- New Folder
-
--
- Recursive Move
-
- Move all the files in the current directory and all files in the subfolder to the designated folder
- - :warning: Dangerous operation, please use it with caution.
-
--
- Remove Empty Folder
-
--
- Batch Rename
-
--
- Upload
-
- Open the upload modal.
-
--
- Offline download
-
- Open the offline download modal.
-
--
- Toggle Outline
-
- Toggle the outline for markdown viewer.
-
--
- Toggle Checkbox
-
- Select multiple files.
- - In the display of Toggle Checkbox, first trigger the selection operation to prevent jumping into a deeper folder
- - In the display of Toggle Checkbox, change it to hold down the `Alt` key and click to open the folder (macOS Press and hold the `Option` key)
-
--
- Local Settings
-
- Open the local settings.
-
-:::
-
-::: zh-CN
我们在主页右下角能看到一个 图标,如果你电脑分辨率很高 可能图标比较小
展开后分别是
@@ -120,43 +59,11 @@ After the expand
打开本地设置页面。
-:::
-
-::: en
-::: tip
-If you didn't find this feature, please update the version
-:::
-
-::: zh-CN
::: tip
如果你没有找到此功能,请更新版本
:::
-## Upload Modal { lang="en" }
-
-## 上传窗口 { lang="zh-CN" }
-
-::: en
-
-
-
-Drag files to the field to upload, or click `Choose Folder` or `Choose File` to select files to upload.
-
-There are two methods to upload files:
-
-1. **Stream**: directly puts the binary content of the file into the body, so that the backend can use very little memory, it seem to have no downsides.
-
-2. **Form**: is to wrap the file into formdata and upload it. The memory used by the backend will be more, but there is no limit on the size.
-
-There are the following options:
-
-- **Add as Task**: Create an upload task in the background.
-- **Overwrite existing File**: If the file already exists, it will be overwritten.
-- **Try rapid**: Upload the file with its checksum information, requires cloud storage support.
-
-:::
-
-::: zh-CN
+## 上传窗口

@@ -175,31 +82,7 @@ There are the following options:
- **尝试秒传**:在上传时携带文件的校验信息,需要网盘支持
-:::
-
-## Offline Download Modal { lang="en" }
-
-## 离线下载窗口 { lang="zh-CN" }
-
-::: en
-
-
-
-Download the file offline and upload it to the network disk directory you designated.
-
-If you want to keep the offline downloaded file, please add the link first, select the options below, and then start the offline download.
-
-**How to use**: Navigate to the target directory, then select "Offline Download" from the bottom-right corner.
-
-Supported offline download tools: `Aria2`, `qBittorrent`, `SimpleHttp`.
-
-**Note**: When using the offline download feature, OpenList must be installed and running on the corresponding device. Offline downloads cannot be performed across different devices.
-
-For more information, please refer to [Offline Download](../guide/advanced/offline-download.md).
-
-:::
-
-::: zh-CN
+## 离线下载窗口

@@ -215,53 +98,7 @@ For more information, please refer to [Offline Download](../guide/advanced/offli
详见:[离线下载](../guide/advanced/offline-download.md)。
-:::
-
-## Local Settings Modal { lang="en" }
-
-## 本地设置窗口 { lang="zh-CN" }
-
-::: en
-
-Local settings will be saved to the browser's local storage.
-
-1. **Aria2 RPC URL** and **Aria2 RPC secret**: This field is for entering the user's Aria2 information, which enables batch downloading on the client side, not on the server side.
-
-2. **Global default layout**: The selection of view selection in the upper right corner is to enter that folder to modify it only for the only folder. This setting can consistently take effect without using a folder setting.
-
-3. **Show folder in image view**: literal meaning
-
-4. **Show sidebar**: Add a list directory on the left side of the list like Windows Explorer, which can jump to a deep folder faster
-
-5. **Show file count message**: At the bottom of the page (in list view) or at the top (in grid or image view), display the total number of items in the current folder and how many items are selected.
-
-6. **Position of header & nav bar**: Is the logo and navigation bar displaying at the drop -down list?
- - **Normal**: No need to display
- - **Stick to top of page**: adsorb LOGO and navigation bar
- - **Only nav bar sticky**: Do not adsorb LOGO, only adsorb navigation bar
-
-7. **Grid item size** : Adjust the picture size in the Grid item mode. Default: 90.
-
-8. **List item filename overflow**: When the text is too long, the three state selection
- - **Ellipsis**: Default
- - **Scrollable**: PC users use the `Shift` + `mousewheel` on the file, if it is a mobile phone user sliding the file left and right
- - **Multi-line**
-
-9. **Open item on Checkbox**:
- - **Direct**: Open the file/enter the folder
- - **Double Click**
- - **Disable while checked**
- - With `Ctrl` or `Command` (macOS) hold
- - With `Alt` or `Option` (macOS) hold
- - If the button option does not take effect, please check whether the browser plugin conflict
-
- Tips: You can press the `Shift` key to select one, and then select one end. You can quickly select all the files in the middle
-
-10. **Language package selection** and **night mode and daytime mode switch**
-
-:::
-
-::: zh-CN
+## 本地设置窗口
本地设置会被保存到浏览器的 Local Storage 中。
@@ -298,5 +135,3 @@ Local settings will be saved to the browser's local storage.
Tips:可以按着 `Shift` 键选择一个开头,再选择一个结尾可以快速选择中间的全部
10. **语言包选择** 和 **夜间白天切换**
-
-:::
diff --git a/pages/configuration/site.md b/pages/configuration/site.md
index 1ebf2a6b8..30dc0f35d 100644
--- a/pages/configuration/site.md
+++ b/pages/configuration/site.md
@@ -1,58 +1,26 @@
---
-title:
- en: Site Configuration
- zh-CN: 网站设置
-# This is the icon of the page
-icon: iconfont icon-tab
-# A page can have multiple categories
categories:
- configuration
-# A page can have multiple tags
top: 50
---
-## Version { lang="en" }
+# 网站设置
-## 版本 { lang="zh-CN" }
+## 版本
-::: en
-The version of OpenList, readonly.
-:::
-::: zh-CN
OpenList 的版本,只读。
-:::
-## Site title { lang="en" }
+## 网站标题
-## 网站标题 { lang="zh-CN" }
-
-::: en
-The title of OpenList, such as `OpenList`.
-:::
-::: zh-CN
OpenList 的标题,例如 OpenList。
-:::
-
-## Announcement { lang="en" }
-
-## 公告 { lang="zh-CN" }
-
-::: en
-The announcement of OpenList, such as `### Hello\nWelcome to use OpenList`. We suggest you add a title in front of the content, such as `### Hello`, so that the content will not be covered by `Close Button`.
-
-- If you don't want to display it, you can clear the contents of the announcement to not display it.
-- If you think the `x` button in the upper right corner is in the way, you can use the following CSS to remove it
-:::
+## 公告
-::: zh-CN
OpenList 的公告,如 `### Hello\nWelcome to use OpenList`。我们建议您在内容前添加标题,例如 `### Hello`,以免内容被关闭按钮覆盖。
- 如想不显示,可以清空公告内内容即可不显示。
- 如果嫌右上角的 `x` 按钮碍事可以使用如下CSS去掉
-:::
-
```css
```
-## Pagination type { lang="en" }
-
-## 分页类型 { lang="zh-CN" }
-
-::: en
-
-- All: All files will be displayed at once.
-- Pagination: Show a `Paginator` at the bottom of the page.
-- Load more: Show a `Load more` button at the bottom of the page.
-- Auto load more: Automatically load more files when scrolling to the bottom of the page.
-
-:::
-::: zh-CN
+## 分页类型
- 全部:一次显示所有文件。
- 分页:在页面底部显示一个“分页器”。
- 加载更多:在页面底部显示“加载更多”按钮。
- 自动加载更多:滚动到页面底部时自动加载更多文件。
-:::
-
-## Default page size { lang="en" }
+## 默认每页文件数量
-## 默认每页文件数量 { lang="zh-CN" }
-
-::: en
-The default page size of the `openlist` if `Pagination type` doesn't set to `All`, such as `20`.
-:::
-::: zh-CN
OpenList 的默认每页文件数量,当 `Pagination type` 没有被设置为 `全部` 时生效,例如 `20`。
-:::
-
-## Allow indexing { lang="en" }
-## 允许索引 { lang="zh-CN" }
+## 允许索引
-::: en
-Whether to allow others to mount your OpenList to build the index, check it and enable it.
-
-The default is off, use with caution. (New features in version 3.8.0)
-:::
-
-::: zh-CN
是否允许其他人挂载你的OpenList后进行索引构建,勾选后开启。
**默认为关闭状态,谨慎使用。** (v3.8.0 新增功能)
-:::
-
-## Allow mounted { lang="en" }
-
-## 允许挂载 { lang="zh-CN" }
-::: en
-Whether to allow being mounted by other OpenList instances.
+## 允许挂载
-**The default is enabled. If you don't want to be mounted by others, it's recommended to disable this option.** (New feature in v3.16.3)
-:::
-
-::: zh-CN
是否允许被其它 OpenList 挂载。
**默认为开启状态,如果你不想被别人挂载建议关闭。**(v3.16.3新增功能)
-:::
## robots.txt
-::: en
-Crawler configuration/rules.
-
-The default is to allow crawlers to access all pages.
-
-`Allow: /` Indicates that the crawlers of search engines are allowed to visit all pages:
-
-```txt{2}
-User-agent: *
-Allow: /
-```
-
-If you want to prevent crawlers from accessing all pages, you can change it to this:
-
-```txt{2}
-User-agent: *
-Disallow: /
-```
-
-:::
-
-::: zh-CN
爬虫的配置/规则。
默认允许爬虫访问所有页面。
@@ -166,5 +71,3 @@ Allow: /
User-agent: *
Disallow: /
```
-
-:::
diff --git a/pages/configuration/style.md b/pages/configuration/style.md
index a48ae879b..63b85a166 100644
--- a/pages/configuration/style.md
+++ b/pages/configuration/style.md
@@ -1,98 +1,39 @@
---
-title:
- en: Style Configuration
- zh-CN: 样式设置
-# This is the icon of the page
-icon: iconfont icon-style
-# This control sidebar order
categories:
- configuration
-# A page can have multiple tags
top: 40
---
-## Logo
+# 样式设置
-::: en
-The logo is displayed in the upper left corner of the page. The default is the `OpenList logo`.
+## Logo
-You can set two different ones at night and during the day, one link per line.
-:::
-::: zh-CN
Logo 显示在页面的左上角。默认为 OpenList Logo。
可以分别设置夜间和白天两个不同的,方法一行一个链接。
-:::
-## Favicon { lang="en" }
+## 网站图标
-## 网站图标 { lang="zh-CN" }
-
-::: en
-The favicon is displayed in the browser tab. The default is the `OpenList logo`.
-:::
-::: zh-CN
网站图标(Favicon)显示在浏览器选项卡中。默认为 OpenList Logo。
-:::
-
-## Main color { lang="en" }
-## 主颜色 { lang="zh-CN" }
+## 主颜色
-::: en
-The main color is used to on the page. The default is `#1890ff`.
-:::
-::: zh-CN
全站页面的主要颜色。默认值为 `#1890ff`。
-:::
-## Home icon { lang="en" }
+## 首页图标
-## 首页图标 { lang="zh-CN" }
-
-::: en
-The home icon is displayed in the left of the navigation bar. The default is `🏠`.
-:::
-::: zh-CN
主页图标显示在导航栏的左侧。 默认是 `🏠`。
-:::
-
-## Home container { lang="en" }
-
-## 主容器 { lang="zh-CN" }
-
-::: en
-- Max 980px: the main width will set to `min(99%, 980px)`
-- Hope container: sets the max-width of the content to match the min-width of the current breakpoint, refer to https://openlistteam.github.io/hope-ui/docs/layout/container
-
-:::
-
-::: zh-CN
+## 主容器
- Max 980px:主宽度将设置为 `min(99%, 980px)`
- Hope 容器:设置内容的最大宽度以匹配当前断点的最小宽度,参考 https://openlistteam.github.io/hope-ui/docs/layout/container
-:::
-
-## Settings layout { lang="en" }
-
-## 设置布局 { lang="zh-CN" }
-
-::: en
-The layout of the settings items on the management page.
-
-- Responsive: grids next to each other
-- List style: one grid per row
-
-The default is: List
+## 设置布局
-:::
-::: zh-CN
管理页面中设置项的布局方式。
- 响应式:一个格子一个格子挨在一起的
- 列表:一行一个格子
默认为:列表
-:::
diff --git a/pages/ecosystem/index.md b/pages/ecosystem/index.md
index 97453e744..00b27662a 100644
--- a/pages/ecosystem/index.md
+++ b/pages/ecosystem/index.md
@@ -1,343 +1,174 @@
---
-title:
- en: OpenList Ecosystem
- zh-CN: OpenList 生态项目
categories:
- ecosystem
top: 1000
---
-::: en
-This page shows the OpenList ecosystem, including official projects and third-party projects
-:::
+# OpenList 生态项目
-::: zh-CN
本页面展示了OpenList的生态项目,包括官方项目和第三方项目
-:::
-## Official Projects { lang="en" }
+## 官方项目
-## 官方项目 { lang="zh-CN" }
+### [OpenList Docs ↗](./official_docs)
-### [OpenList Docs ↗](./ecosystem/official_docs)
-
-::: en
-Documentation based on Valaxy, supporting multiple styles and real-time builds from the GitHub repository.
-:::
-::: zh-CN
-基于Valaxy的文档,支持多种样式,基于GitHub仓库实时构建。
-:::
+基于 VitePress 的文档,基于 GitHub 仓库实时构建。
---
-### [OpenList Desktop ↗](./ecosystem/official_desktop)
+### [OpenList Desktop ↗](./official_desktop)
-::: en
-A cross-platform GUI management interface integrating OpenList and rclone, offering graphical configuration, monitoring, and service management features.
-:::
-::: zh-CN
整合了OpenList和rclone的跨平台GUI管理界面,提供图形化配置界面、监控和服务管理等实用功能。
-:::
---
-### [OpenList Mobile ↗](./ecosystem/official_mobile)
+### [OpenList Mobile ↗](./official_mobile)
-::: en
-A mobile file server application based on OpenList, built with Flutter framework. Turn your phone into a file server.
-:::
-::: zh-CN
基于OpenList的移动端文件服务器应用,使用Flutter框架开发。将您的手机变成文件服务器。
-:::
---
-### [OpenList APIPages ↗](./ecosystem/official_APIpage)
+### [OpenList APIPages ↗](./official_APIpage)
-::: en
-An open-source implementation of the online API functionality in OpenList, deployable on various servers, providing stable and privacy-protected API authentication services for cloud storage users.
-:::
-::: zh-CN
OpenList中在线API功能的开源实现,可灵活部署至多种服务器,可以为网盘用户提供稳定且有双向隐私保障的API鉴权服务。
-:::
---
-### [OpenList Proxy ↗](./ecosystem/official_proxy)
+### [OpenList Proxy ↗](./official_proxy)
-::: en
-OpenList traffic proxy program, which can use another server to proxy OpenList traffic.
-:::
-::: zh-CN
OpenList流量代理程序,可以利用另一台服务器代理OpenList的流量
-:::
-
-### [OpenList Worker ↗](./ecosystem/official_worker)
-
-:::: en
-The official TypeScript + Serverless port of OpenList running on Cloudflare Workers / EdgeOne / Alibaba Cloud ESA, reusing the official React 19 frontend.
-::::
-:::: zh-CN
-OpenList 官方的 TypeScript + Serverless 移植版,运行于 Cloudflare Workers / EdgeOne / 阿里云 ESA,复用官方 React 19 前端。
-::::
---
-## Third-Party Open Source Projects { lang="en" }
+### [OpenList Worker ↗](./official_worker/)
-## 第三方开源项目 { lang="zh-CN" }
+OpenList 官方的 TypeScript + Serverless 移植版,运行于 Cloudflare Workers / EdgeOne / 阿里云 ESA,复用官方 React 19 前端。
-:::: en
-::: tip
-Third-party open source projects are based on community open-source security. The following projects are not affiliated with OpenListTeam. Please evaluate the associated risks before deploying them to a production environment.
+---
-If you have a new project that is not listed here, you can submit it through [Issues](https://github.com/OpenListTeam/OpenList-Docs/issues) or [Pull Request](https://github.com/OpenListTeam/OpenList-Docs/pulls).
-:::
-::::
+## 第三方开源项目
-:::: zh-CN
::: tip
以下第三方开源项目均由社区开发并保持开源,与 OpenListTeam 无直接关联。在部署到生产环境前,请自行评估相关风险。
如果您有新的项目没有在此列出,可以通过 [Issues](https://github.com/OpenListTeam/OpenList-Docs/issues) 或 [Pull Request](https://github.com/OpenListTeam/OpenList-Docs/pulls) 提交。
-::::
+:::
### [sbwml/luci-app-openlist ↗](https://github.com/sbwml/luci-app-openlist)
-::: en
-Provides LuCI support for OpenList, suitable for OpenWRT-based router systems.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-::::
-
-::: zh-CN
为 OpenList 提供 LuCI 支持,适用于基于 OpenWRT 的路由器系统。
自由开源软件,MIT 协议
-:::
---
### [giturass/openlist_termux ↗](https://github.com/giturass/openlist_termux/)
-::: en
-OpenList management script for Termux, used for convenient installation, updating, and management of OpenList in the Android Termux environment.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-
-::: zh-CN
Termux 下的 OpenList 管理脚本,用于在 Android Termux 环境中便捷安装、更新和管理 OpenList.
自由开源软件,MIT协议
-:::
---
### [ypq123456789/openlist-manger ↗](https://github.com/ypq123456789/openlist-manger)
-::: en
-A cross-platform interactive Shell script for managing OpenList, supporting Linux, macOS, Windows (WSL), and Android Termux.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-
-::: zh-CN
一个用于管理 OpenList 的跨平台交互式 Shell 脚本,支持 Linux、macOS、Windows (WSL) 和 Android Termux。
自由开源软件,MIT协议
-:::
---
### [Alien-Et/OpenList-Magisk ↗](https://github.com/Alien-Et/OpenList-Magisk)
-::: en
-The OpenList Magisk module integrates the OpenList file server into the Android system, running in a systemized manner through Magisk, supporting ARM and ARM64 architectures.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-
-::: zh-CN
OpenList Magisk 模块将 OpenList 文件服务器集成到 Android 系统中,通过 Magisk 以系统化方式运行,支持 ARM 和 ARM64 架构。
自由开源软件,MIT 协议
-:::
---
### [qianye216/OpenList-Desktop ↗](https://github.com/qianye216/OpenList-Desktop)
-::: en
-OpenList Desktop is a cross-platform desktop client designed for OpenList (Alist) and Rclone. It provides a modern and user-friendly graphical interface that helps you easily manage Alist services and Rclone cloud storage mounts without needing to memorize and input tedious command-line instructions.
-
-Free and Open Source Software licensed under the GPLv3 license.
-:::
-
-::: zh-CN
OpenList Desktop 是一个为 OpenList (Alist) 和 Rclone 设计的跨平台桌面客户端。它提供了一个现代化且用户友好的图形界面,帮助您轻松管理 Alist 服务和 Rclone 云盘挂载,无需记忆和输入繁琐的命令行指令。
自由开源软件,GPLv3 协议
-:::
---
### [LeoHaoVIP/AListLiteAndroid ↗](https://github.com/LeoHaoVIP/AListLiteAndroid)
-::: en
-AListLite is an Android application that supports running OpenList services. Compared to the tutorial described in BV1ex4y157xJ, users can use OpenList services on Android devices (phones/TVs) without needing to install Termux.
-
-Free and Open Source Software licensed under the AGPLv3 license.
-:::
-
-::: zh-CN
AListLite 是一款支持运行 OpenList 服务的 Android 应用,相对于教程 BV1ex4y157xJ 中的描述,用户无需借助安装 Termux 即可实现在 Android 设备(手机/电视)上使用 OpenList 服务。
自由开源软件,AGPLv3 协议
-:::
---
### [outlook84/mpv-handler-openlist ↗](https://github.com/outlook84/mpv-handler-openlist)
-::: en
-This is a URL protocol handler (mpv://) designed for mpv or mpv.net media players on Windows platform. This tool is used to invoke mpv or mpv.net players from OpenList web pages to open video links.
-
-Free and Open Source Software licensed under the GPLv2 license.
-:::
-
-::: zh-CN
这是一个为 Windows 平台上的 mpv 或 mpv.net 媒体播放器设计的 URL 协议注册器 (mpv://)。该工具用于在 OpenList Web 网页上调用 mpv 或 mpv.net 播放器来打开视频链接。
自由开源软件,GPLv2 协议
-:::
---
### [outlook84/openlist-tvbox-gateway ↗](https://github.com/outlook84/openlist-tvbox-gateway)
-::: en
-OpenList gateway for TVBox, used to connect OpenList resources to TVBox-compatible clients.
-
-Free and Open Source Software licensed under the AGPLv3 license.
-:::
-
-::: zh-CN
适用于 TVBox 的 OpenList 网关,用于将 OpenList 资源接入兼容 TVBox 的客户端。
自由开源软件,AGPLv3 协议
-:::
---
### [moyanj/AList3SDK ↗](https://github.com/moyanj/AList3SDK)
-::: en
-A high-performance Python SDK for easy interaction with OpenList/AList services. Supports both asynchronous and synchronous APIs, and provides comprehensive type annotations!
-
-Free and Open Source Software licensed under the LGPL-2.1 license.
-:::
-
-::: zh-CN
一个高性能的 Python SDK,用于与 OpenList/AList 服务轻松交互。同时支持异步和同步 API,并提供完善的类型注解!
自由开源软件,LGPL-2.1协议
-:::
---
### [huancun/Openlist-EX-container ↗](https://github.com/huancun/Openlist-EX-container)
-::: en
-This project is an improved version based on Alist-EX-container.
-Integrates Openlist, Aria2, qBittorrent, Caddy reverse proxy, supports multi-arch one-click deployment, navigation page and multiple web panels, perfect for offline download and resource management.
-
-Free and Open Source Software licensed under the GPLv3 license.
-:::
-
-::: zh-CN
该项目基于 Alist-EX-container 改进。
集成 Openlist、Aria2、qBittorrent、Caddy 反向代理,支持多架构一键部署,带导航页和多种 Web 面板,适合离线下载和资源管理。
自由开源软件,GPLv3 协议
-:::
---
### [hienao/ostrm ↗](https://github.com/hienao/ostrm)
-::: en
-A full-stack application for converting OpenList file lists into STRM streaming media files. (Originally the openlist-strm project)
-
-Free and Open Source Software licensed under the GPLv3 license.
-:::
-
-::: zh-CN
一个用于将 OpenList 文件列表转换为 STRM 流媒体文件的全栈应用(原为 openlist-strm 项目)
自由开源软件,GPLv3协议
-:::
---
### [li-peifeng/iNoi ↗](https://github.com/li-peifeng/iNoi)
-::: en
-An open-source fork of OpenList focusing on stability.
-
-Free and Open Source Software licensed under the AGPLv3 license.
-:::
-
-::: zh-CN
一个 OpenList 的开源分支,以追求稳定为主
自由开源软件,AGPLv3协议
-:::
---
### [907739769/OpenList-strm-RuoYi ↗](https://github.com/907739769/OpenList-strm-RuoYi/)
-::: en
-An improved version of OpenList Strm based on RuoYi framework.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-
-::: zh-CN
基于RuoYi框架升级的OpenList Strm 应用
自由开源软件,MIT协议
-:::
---
### [Liki4/qnap-openlist-webdav ↗](https://github.com/Liki4/qnap-openlist-webdav/)
-::: en
-QNAP OpenList | The third-party open-source QPKG version of OpenList.
-
-Free and Open Source Software licensed under the AGPLv3 license.
-:::
-
-::: zh-CN
QNAP OpenList | OpenList的第三方开源qpkg版本。
自由开源软件,AGPLv3协议
-:::
---
### [HisAtri/openlistapi ↗](https://github.com/HisAtri/openlistapi/)
-::: en
-An open-source Python client implementing the OpenList API.
-
-Free and Open Source Software licensed under the MIT license.
-:::
-
-::: zh-CN
实现了 OpenList API 的 Python 客户端。
自由开源软件,MIT协议
@@ -346,21 +177,14 @@ Free and Open Source Software licensed under the MIT license.
### [jiwangyihao/olist-cdn-preheat ↗](https://github.com/jiwangyihao/olist-cdn-preheat/)
-::: en
-OpenList dedicated CDN preheating tool. When used with EdgeOne/ESA origin-following redirection, it efficiently improves cache hit rates and accelerates site downloads.
-
-Free and Open Source Software licensed under the MPLv2 license.
-:::
-
-::: zh-CN
OpenList 专用 CDN 预热工具。搭配 EdgeOne/ESA 回源跟随重定向,高效提升缓存命中率,加速站点下载。
自由开源软件,MPLv2协议
-:::
+
+---
### [MY QNAP's OpenList ↗](https://www.myqnap.org/product/openlist/)
-::: zh-CN
QNAP存储库 MyQNAP 将 OpenList 应用进行分发并收取 6 美元费用。
我方已与 QNAP 法国团队取得联系,并根据 AGPL 协议及 CC 协议,要求对方提供应用的哈希值,或将该应用下架。
目前,沟通进展如下:
@@ -371,33 +195,6 @@ QNAP存储库 MyQNAP 将 OpenList 应用进行分发并收取 6 美元费用。
4. 基于上述情况,QNAP 已临时下架该应用,并将更新页面。展示哈希值后,OpenList 的下载与分发将恢复。
5. 截至目前,QNAP 暂未实际违反协议。我方为防范开源供应链风险而启动的调查行动已完成。
-:::
-::: en
-QNAP's MyQNAP repository distributes the OpenList application for a fee of $6.
-We have contacted the QNAP France team and, based on the AGPL and CC licenses, requested them to provide the hash values of the application or take it down.
-The communication progress is as follows:
-
-1. The application is provided by QNAP officially, not uploaded by users.
-2. The charging behavior is not for profit, so the CC license does not apply.
-3. According to the AGPL license, if the application has not been modified, hash values like MD5, SHA, etc. must be provided. Currently, QNAP states that the relevant work is in progress.
-4. Based on the above situation, QNAP has temporarily taken down the application and will update the page. Once the hash values are displayed, the download and distribution of OpenList will resume.
-5. As of now, QNAP has not actually violated the license. Our investigation initiated to prevent open-source supply chain risks has been completed.
-
-:::
-
-:::: en
-::: details History information (outdated,archived at 2026-01-22)
-The third-party closed-source QPKG version of OpenList.
-
-[Archived on 2025-7-13](https://web.archive.org/web/20250713005135/https://www.myqnap.org/product/openlist/)
-
-Proprietary software, paid license.
-
-Note: The source code is not open, violating the AGPLv3 license and the OpenList logo's CC BY-NC-SA 4.0 license.
-:::
-::::
-
-:::: zh-CN
::: details 历史信息(已过时,归档于2026-01-22)
OpenList的第三方闭源qpkg版本。
@@ -406,42 +203,18 @@ OpenList的第三方闭源qpkg版本。
专有软件,付费授权
注意:因没有开放源码,违反AGPLv3许可证、违反OpenList LOGO的CC BY-NC-SA 4.0许可。
-::::
-
-## Third-Party Proprietary Software { lang="en" }
-
-## 其他第三方项目 { lang="zh-CN" }
-
-:::: en
-::: danger
-The following lists several other third-party projects derived from OpenList that do not fall into the above categories.
-
-Any actions of these software/projects (including references to OpenList in their names, functionality design, content, or promotional methods) do not represent the stance of the OpenList project. The functionality, consequences of use, and related legal responsibilities are entirely borne by their respective developers or publishers, and the OpenList project assumes no responsibility.
:::
-::::
-:::: zh-CN
+## 其他第三方项目
+
::: danger
以下列出若干基于 OpenList 衍生的其他不符合上述分类的的第三方项目。
以下软件/项目的任何行为(包括其名称中对 OpenList 的引用、功能设计、内容及宣传方式)均**不代表** OpenList 项目的立场。软件功能、使用后果及相关法律责任完全由其开发者或发布方承担,OpenList 项目概不负责。
-::::
+:::
### [Yxiguan/OpenList_123](https://github.com/Yxiguan/OpenList_123)
-:::: en
-::: danger
-The third-party closed-source modified version of OpenList.
-
-[Archived on 2025-10-19](https://web.archive.org/web/20251019150201/https://github.com/Yxiguan/OpenList_123)
-
-Proprietary software, no license.
-
-Note: The source code is not open, violating the AGPLv3 license.
-:::
-::::
-
-:::: zh-CN
::: danger
OpenList的第三方闭源修改版本。
@@ -450,4 +223,4 @@ OpenList的第三方闭源修改版本。
专有软件,无授权
注意:因没有开放源码,违反AGPLv3许可证。
-::::
+:::
diff --git a/pages/ecosystem/official_APIpage.md b/pages/ecosystem/official_APIpage.md
index ed3fffbdd..842dd36b4 100644
--- a/pages/ecosystem/official_APIpage.md
+++ b/pages/ecosystem/official_APIpage.md
@@ -1,72 +1,20 @@
---
-title:
- en: OpenList APIPages
- zh-CN: OpenList APIPages
categories:
- ecosystem
- eco_official
top: 970
---
-## What is OpenList APIPages { lang="en"}
+# OpenList APIPages
-## OpenList APIPages 是什么 { lang="zh-CN" }
+## OpenList APIPages 是什么
### [OpenListTeam/OpenList-APIPages](https://github.com/OpenListTeam/OpenList-APIPages)
-:::en
-[OpenListTeam/OpenList-APIPages](https://github.com/OpenListTeam/OpenList-APIPages) is a utility website led by [@PIKACHUIM](https://github.com/PIKACHUIM) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-APIPages/graphs/contributors). The frontend is primarily used for initial authorization and obtaining refresh tokens of cloud storage clients, while the backend mainly supports a feature called "Online API", which enables remote token refresh functionality while protecting developer client secrets.
-:::
-:::zh-CN
[OpenListTeam/OpenList-APIPages](https://github.com/OpenListTeam/OpenList-APIPages) 是一个由 [@PIKACHUIM](https://github.com/PIKACHUIM) 牵头,和其他[主要贡献者](https://github.com/OpenListTeam/OpenList-APIPages/graphs/contributors)共同协作完成的工具型网站,前端主要用于实现对网盘客户端的初始授权和刷新令牌,而后端则主要支撑了一个名为“在线API”的功能,可以在保护开发者客户端密钥的前提下,实现对用户令牌的远程刷新功能。
-:::
-
-## Why OpenList APIPages is needed { lang="en"}
-
-## 为什么需要 OpenList APIPages { lang="zh-CN" }
-
-:::en
-Cloud Storage Background:
-
-- Most domestic cloud storage services do not provide official API access to individuals, or the application process is cumbersome, which is not conducive to rapid deployment.
-- According to the cloud storage providers' management requirements, the obtained client keys must not be leaked.
-- User authorization is in the form of refresh tokens, which need to be periodically combined with client keys to obtain refreshed access tokens from the cloud storage servers.
-- API calls require the user's latest access tokens.
-
-Solution:
-
-- Community volunteers provide qualification certification and apply for API access permissions from cloud storage officials.
-- Use relay servers to protect client keys.
-- Periodically send refresh tokens to designated relay servers, which use built-in client keys to refresh access tokens.
-- The relay server sends access tokens back to the OpenList client.
-
-The relay server described above is the backend functionality of the Online API server/APIPages, which works as follows:
-
-```mermaid
-sequenceDiagram
- participant OpenList
- participant OnlineAPI as Online API Server
- participant Server as Cloud Storage Server
-
- OpenList ->> OnlineAPI: Refresh Token
- OnlineAPI ->> Server: Cloud Storage Client Key
- Server -->> OnlineAPI: Access Token
- OnlineAPI -->> OpenList: Access Token
- OpenList ->> Server: Access Token
- OpenList <<->> Server: Cloud Storage Data
-```
-
-The frontend part of APIPages also solves the following problems:
-
-- Initial authorization verification for different cloud storage services.
-- Authorization while protecting built-in client keys.
-- Authorization with custom client keys.
-- Providing callback addresses for custom client keys.
-- Other practical functions for cloud storage mounting.
+## 为什么需要 OpenList APIPages
-:::
-:::zh-CN
网盘背景:
- 大部分国内网盘没有对个人开放官方API调用的权限,或者申请过程繁琐,不利于快速部署。
@@ -104,44 +52,19 @@ APIPages的前端部分同时解决了如下问题:
- 提供自定义客户端密钥下的的回调地址。
- 其他网盘挂载的实用功能。
-:::
-
-## How to use OpenList APIPages { lang="en"}
-
-## 如何使用 OpenList APIPages { lang="zh-CN" }
+## 如何使用 OpenList APIPages
-## When OpenList APIPages is not needed { lang="en"}
-
-## 什么时候不需要 OpenList APIPages { lang="zh-CN" }
-
-:::en
-:::tip
-For ordinary users, we strongly recommend using API servers provided by the community to reduce deployment difficulty.
-
-If you encounter failures in the network section, we recommend that you resolve.
+## 什么时候不需要 OpenList APIPages
-:::
-:::zh-CN
:::tip
对于普通用户,我们强烈建议使用由社区提供的API服务器以降低部署难度。
如果在网络部分遇到故障,我们建议您先行解决网络问题。
:::
-:::en
-If you choose not to use community-provided servers or deploy your own server, please verify the following content:
-- 1. Have completely read the documentation related to the corresponding cloud storage driver.
-- 2. Have completely read the open API development documentation provided by the corresponding cloud storage service.
-- 3. Can read and understand the project code, have certain debugging capabilities, and can understand the corresponding logs and error messages.
-- 4. Fully understand the rights granted to you by AGPLv3 and the parts we should be responsible for.
-- 5. Can use basic GitHub functions and know how to **correctly** submit issues/pull requests to us.
-- 6. Please remember that we have no way to solve your network problems.
-
-:::
-:::zh-CN
如果您选择不使用社区提供的服务器,或者自己部署服务器,请对照一下内容进行核实
- 1.完整阅读了对应网盘驱动相关内容的文档。
@@ -151,44 +74,9 @@ If you choose not to use community-provided servers or deploy your own server, p
- 5.可以使用GitHub的基本功能,知道如何**正确的**向我们提交Issue/Pull Request。
- 6.请记住,我们没有任何办法可以解决您遇到的网络问题。
-:::
-
-## APIPages Deployment Tutorial { lang="en"}
-
-## APIPages 的部署教程 { lang="zh-CN" }
-
-### One-Click Deployment { lang="en"}
-
-### 一键部署 { lang="zh-CN" }
-
-:::en
-
-- EdgeOne Functions International
-
-
-
-
-
-After deployment, please log in to the [EdgeOne Functions console](https://console.tencentcloud.com/edgeone/pages) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
-
-- EdgeOne Functions China
-
-
-
-
-
-After deployment, please log in to the [EdgeOne Functions console](https://console.cloud.tencent.com/edgeone/pages) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
-
-- Cloudflare Workers Global
+## APIPages 的部署教程
-
-
-
-
-After deployment, please log in to the [Cloudflare Workers console](https://dash.cloudflare.com/) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
-
-:::
-:::zh-CN
+### 一键部署
- EdgeOne Functions 国际站
@@ -214,87 +102,7 @@ After deployment, please log in to the [Cloudflare Workers console](https://dash
部署完成后,请登录[Cloudflare Worker后台](https://dash.cloudflare.com/),修改环境变量,请参考[变量说明](#变量说明)部分
-:::
-
-### Container Deployment { lang="en" }
-
-### 容器部署 { lang="zh-CN" }
-
-:::en
-
-- Pull image
-
-```
-docker pull openlistteam/openlist_api_server
-```
-
-or
-
-```
-docker pull ghcr.io/openlistteam/openlist_api_server:latest
-```
-
-- Start project
-
-```
-docker run -d --name oplist-api-server \
- -p 3000:3000 \
- -e OPLIST_MAIN_URLS="api.example.com" \
- -e OPLIST_PROXY_API="gts.example.com" \
- -e OPLIST_ONEDRIVE_UID= `#optional` \
- -e OPLIST_ONEDRIVE_KEY= `#optional` \
- -e OPLIST_ALICLOUD_UID= `#optional` \
- -e OPLIST_ALICLOUD_KEY= `#optional` \
- -e OPLIST_BAIDUYUN_UID= `#optional` \
- -e OPLIST_BAIDUYUN_KEY= `#optional` \
- -e OPLIST_BAIDUYUN_EXT= `#optional` \
- -e OPLIST_CLOUD115_UID= `#optional` \
- -e OPLIST_CLOUD115_KEY= `#optional` \
- -e OPLIST_GOOGLEUI_UID= `#optional` \
- -e OPLIST_GOOGLEUI_KEY= `#optional` \
- -e OPLIST_YANDEXUI_UID= `#optional` \
- -e OPLIST_YANDEXUI_KEY= `#optional` \
- -e OPLIST_DROPBOXS_UID= `#optional` \
- -e OPLIST_DROPBOXS_KEY= `#optional` \
- -e OPLIST_QUARKPAN_UID= `#optional` \
- -e OPLIST_QUARKPAN_KEY= `#optional` \
- openlistteam/openlist_api_server:latest
-```
-
-- You can replace the image with ghcr:
-
- ```
- ghcr.io/openlistteam/openlist_api_server:latest
- ```
-
-- **Please make sure to modify your environment variables according to the environment variables below**
-
-- Environment Variable Description
-
-| Variable Name | Required | Variable Type | Variable Description |
-| --------------------- | -------- | ------------- | ------------------------------------------------------------- |
-| `OPLIST_MAIN_URLS` | Yes | string | Bind main domain, example: api.example.com |
-| `OPLIST_PROXY_API` | No | string | Nodes deployed in mainland China need to specify Google proxy |
-| `OPLIST_ONEDRIVE_UID` | No | string | OneDrive Client ID |
-| `OPLIST_ONEDRIVE_KEY` | No | string | OneDrive Client Secret |
-| `OPLIST_ALICLOUD_UID` | No | string | AliCloud Drive Developer AppID |
-| `OPLIST_ALICLOUD_KEY` | No | string | AliCloud Drive Developer AppKey |
-| `OPLIST_BAIDUYUN_UID` | No | string | Baidu NetDisk Application UID |
-| `OPLIST_BAIDUYUN_KEY` | No | string | Baidu NetDisk Application Secret AppKey |
-| `OPLIST_BAIDUYUN_EXT` | No | string | Baidu NetDisk Application SecretKey |
-| `OPLIST_CLOUD115_UID` | No | string | 115 NetDisk Application ID |
-| `OPLIST_CLOUD115_KEY` | No | string | 115 NetDisk Application Secret |
-| `OPLIST_GOOGLEUI_UID` | No | string | Google Client ID |
-| `OPLIST_GOOGLEUI_KEY` | No | string | Google Global API Key |
-| `OPLIST_YANDEXUI_UID` | No | string | Yandex Application ID |
-| `OPLIST_YANDEXUI_KEY` | No | string | Yandex Application Secret |
-| `OPLIST_DROPBOXS_UID` | No | string | Dropbox Application ID |
-| `OPLIST_DROPBOXS_KEY` | No | string | Dropbox Application Secret |
-| `OPLIST_QUARKPAN_UID` | No | string | QuarkPan Application ID |
-| `OPLIST_QUARKPAN_KEY` | No | string | QuarkPan Application Secret |
-
-:::
-:::zh-CN
+### 容器部署
- 拉取镜像
@@ -365,88 +173,7 @@ docker run -d --name oplist-api-server \
| `OPLIST_QUARKPAN_UID` | 否 | string | 夸克云盘x应用ID |
| `OPLIST_QUARKPAN_KEY` | 否 | string | 夸克云盘应用密钥 |
-:::
-
-### Edge Deployment { lang="en" }
-
-### 边缘部署 { lang="zh-CN" }
-
-:::en
-
-- Clone code
-
-```shell
-git clone https://github.com/OpenListTeam/OpenList-APIPages.git
-```
-
-- Modify configuration (CloudFlare only)
-
-Create and modify `wrangler.jsonc`
-
-```shell
-cp wrangler.example.jsonc wrangler.encrypt.jsonc
-```
-
-Modify variable information:
-
-- MAIN_URLS: Domain name for deployment callback address
-- Other parameters: Application information for each cloud storage service
-
-```
- "vars": {
- "MAIN_URLS": "api.example.com",
- "PROXY_API": "gts.example.com",
- "onedrive_uid": "*****************************",
- "onedrive_key": "*****************************",
- "alicloud_uid": "*****************************",
- "alicloud_key": "*****************************",
- "baiduyun_uid": "*****************************",
- "baiduyun_key": "*****************************",
- "baiduyun_ext": "*****************************",
- "cloud115_uid": "*****************************",
- "cloud115_key": "*****************************",
- "googleui_uid": "*****************************",
- "googleui_key": "*****************************",
- "yandexui_uid": "*****************************",
- "yandexui_key": "*****************************",
- "dropboxs_uid": "*****************************",
- "dropboxs_key": "*****************************",
- "quarkpan_uid": "*****************************",
- "quarkpan_key": "*****************************"
- },
-```
-
-- Test code
-
-```shell
-npm install
-
-# Run in Cloudflare Worker environment
-npm run dev-cf
-
-# Run in Edgeone Functions environment
-npm run dev-eo
-
-# Run in Node Service Work environment
-npm run dev-js
-
-```
-
-- Deploy project
-
-```shell
-# Deploy in Cloudflare Worker environment
-npm run deploy-cf
-
-# Deploy in Edgeone Functions environment
-npm run deploy-eo
-
-# Run locally in Node Service Work
-npm build-js && npm deploy-js
-```
-
-:::
-:::zh-CN
+### 边缘部署
- 克隆代码
@@ -520,70 +247,32 @@ npm run deploy-eo
npm build-js && npm deploy-js
```
-:::
-
-### Variable Description { lang="en" }
-
-### 变量说明 { lang="zh-CN" }
-
-:::en
-| Variable Name | Required | Variable Type | Variable Description |
-| -------------- | ---- | -------- |-------------------|
-| `MAIN_URLS` | Yes | string | Bind main domain, example: api.example.com |
-| `PROXY_API` | No | string | Nodes deployed in mainland China need to specify Google proxy |
-| `onedrive_uid` | No | string | OneDrive Client ID |
-| `onedrive_key` | No | string | OneDrive Client Secret |
-| `alicloud_uid` | No | string | AliCloud Drive Developer AppID |
-| `alicloud_key` | No | string | AliCloud Drive Developer AppKey |
-| `baiduyun_uid` | No | string | Baidu NetDisk Application ID |
-| `baiduyun_key` | No | string | Baidu NetDisk Application Secret AppKey |
-| `baiduyun_ext` | No | string | Baidu NetDisk Application SecretKey |
-| `cloud115_uid` | No | string | 115 NetDisk Application ID |
-| `cloud115_key` | No | string | 115 NetDisk Application Secret |
-| `googleui_uid` | No | string | Google Client ID |
-| `googleui_key` | No | string | Google Global API Key |
-| `yandexui_uid` | No | string | Yandex Application ID |
-| `yandexui_key` | No | string | Yandex Application Secret |
-| `dropboxs_uid` | No | string | Dropbox Application ID |
-| `dropboxs_key` | No | string | Dropbox Application Secret |
-| `quarkpan_uid` | No | string | QuarkPan Application ID |
-| `quarkpan_key` | No | string | QuarkPan Application Secret |
-
-:::
-:::zh-CN
-| 变量名称 | 必要 | 变量类型 | 变量说明 |
-| -------------- | ---- | -------- |-------------------|
-| `MAIN_URLS` | 是 | string | 绑定主域名,示例:api.example.com |
-| `PROXY_API` | 否 | string | 部署在大陆的节点需要指定代理谷歌 |
-| `onedrive_uid` | 否 | string | OneDrive 客户端ID |
-| `onedrive_key` | 否 | string | OneDrive 客户端密钥 |
-| `alicloud_uid` | 否 | string | 阿里云盘开发者AppID |
-| `alicloud_key` | 否 | string | 阿里云盘开发者AppKey |
-| `baiduyun_uid` | 否 | string | 百度网盘应用ID |
-| `baiduyun_key` | 否 | string | 百度网盘应用密钥AppKey |
-| `baiduyun_ext` | 否 | string | 百度网盘应用密钥SecretKey |
-| `cloud115_uid` | 否 | string | 115网盘应用ID |
-| `cloud115_key` | 否 | string | 115网盘应用密钥 |
-| `googleui_uid` | 否 | string | 谷歌客户端ID |
-| `googleui_key` | 否 | string | 谷歌全局API Key |
-| `yandexui_uid` | 否 | string | Yandex应用ID |
-| `yandexui_key` | 否 | string | Yandex应用密钥 |
-| `dropboxs_uid` | 否 | string | Dropboxx应用ID |
-| `dropboxs_key` | 否 | string | Dropbox应用密钥 |
-| `quarkpan_uid` | 否 | string | 夸克云盘x应用ID |
-| `quarkpan_key` | 否 | string | 夸克云盘应用密钥 |
-
-:::
+### 变量说明
+
+| 变量名称 | 必要 | 变量类型 | 变量说明 |
+| -------------- | ---- | -------- | --------------------------------- |
+| `MAIN_URLS` | 是 | string | 绑定主域名,示例:api.example.com |
+| `PROXY_API` | 否 | string | 部署在大陆的节点需要指定代理谷歌 |
+| `onedrive_uid` | 否 | string | OneDrive 客户端ID |
+| `onedrive_key` | 否 | string | OneDrive 客户端密钥 |
+| `alicloud_uid` | 否 | string | 阿里云盘开发者AppID |
+| `alicloud_key` | 否 | string | 阿里云盘开发者AppKey |
+| `baiduyun_uid` | 否 | string | 百度网盘应用ID |
+| `baiduyun_key` | 否 | string | 百度网盘应用密钥AppKey |
+| `baiduyun_ext` | 否 | string | 百度网盘应用密钥SecretKey |
+| `cloud115_uid` | 否 | string | 115网盘应用ID |
+| `cloud115_key` | 否 | string | 115网盘应用密钥 |
+| `googleui_uid` | 否 | string | 谷歌客户端ID |
+| `googleui_key` | 否 | string | 谷歌全局API Key |
+| `yandexui_uid` | 否 | string | Yandex应用ID |
+| `yandexui_key` | 否 | string | Yandex应用密钥 |
+| `dropboxs_uid` | 否 | string | Dropboxx应用ID |
+| `dropboxs_key` | 否 | string | Dropbox应用密钥 |
+| `quarkpan_uid` | 否 | string | 夸克云盘x应用ID |
+| `quarkpan_key` | 否 | string | 夸克云盘应用密钥 |
+
+## 社区 APIPages
-## Community APIPages { lang="en"}
-
-## 社区 APIPages { lang="zh-CN" }
-
-:::en
-:::tip
-The following servers are built and provided by community volunteers. Once used, user authorization credentials will inevitably be sent to the servers over the network. This project is licensed under AGPLv3 and only guarantees to provide the source code "as is". Users should verify the deployed content at their own discretion.
-:::
-:::zh-CN
:::tip
以下服务器由社区志愿者搭建并提供服务,一旦使用将不可避免的将用户授权凭证通过网络形式发送至服务器,本项目根据AGPLv3许可,只保证在源代码层面按“原样”提供,对于部署后的内容,请用户自行甄别。
:::
@@ -593,11 +282,4 @@ The following servers are built and provided by community volunteers. Once used,
......
-:::en
-[Welcome to submit more community servers](https://github.com/OpenListTeam/OpenList-Docs/pulls)
-
-:::
-:::zh-CN
[欢迎提交更多社区服务器](https://github.com/OpenListTeam/OpenList-Docs/pulls)
-
-:::
diff --git a/pages/ecosystem/official_desktop.md b/pages/ecosystem/official_desktop.md
index 33db949c2..ea938a4f3 100644
--- a/pages/ecosystem/official_desktop.md
+++ b/pages/ecosystem/official_desktop.md
@@ -1,48 +1,21 @@
---
-title:
- en: OpenList Desktop
- zh-CN: OpenList Desktop
categories:
- ecosystem
- eco_official
top: 980
---
-## What is OpenList Desktop { lang="en" }
+# OpenList Desktop
-## OpenList Desktop 是什么 { lang="zh-CN" }
+## OpenList Desktop 是什么
### [OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop)
-:::en
-[OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop) is a powerful cross-platform desktop application led by [@Kuingsmile](https://github.com/Kuingsmile) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-Desktop/graphs/contributors). Built with Vue 3, Tauri, and Rust, it provides a user-friendly interface for managing OpenList services and performing local mounts via Rclone. The application serves as a comprehensive solution for managing OpenList file management services, mounting and managing cloud storage (WebDAV), monitoring service status and uptime, and providing system tray integration for background operations.
-
-:::
-
-:::zh-CN
[OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop) 是一个功能强大的跨平台桌面应用程序,由 [@Kuingsmile](https://github.com/Kuingsmile) 牵头,和其他[主要贡献者](https://github.com/OpenListTeam/OpenList-Desktop/graphs/contributors)共同协作完成。基于 Vue 3、Tauri 和 Rust 构建,为管理 OpenList 服务和通过 Rclone 进行本地挂载提供用户友好的界面。该应用程序是一个全面的解决方案,用于管理 OpenList 文件管理服务、挂载和管理云存储(WebDAV)、监控服务运行状态和提供系统托盘集成以进行后台操作。
-:::
-
-## Features { lang="en" }
-
-## 功能特性 { lang="zh-CN" }
-
-### Core Features { lang="en" }
+## 功能特性
-### 核心功能 { lang="zh-CN" }
-
-:::en
-
-- **OpenList Service Management**: Start, stop, and monitor OpenList core services
-- **Local Mounting**: Mount via Rclone to the local file system
-- **Real-time Monitoring**: Track service status, uptime, and performance metrics
-- **Process Management**: Advanced process control with auto-restart capabilities
-- **System Tray**: Background operation with system tray notifications
-
-:::
-
-:::zh-CN
+### 核心功能
- **OpenList 服务管理**:启动、停止和监控 OpenList 核心服务
- **本地挂载**:通过 Rclone 挂载至本地文件系统
@@ -50,23 +23,7 @@ top: 980
- **进程管理**:具有自动重启功能的高级进程控制
- **系统托盘**:带系统托盘通知的后台操作
-:::
-
-### Management Features { lang="en" }
-
-### 管理功能 { lang="zh-CN" }
-
-:::en
-
-- **Service Control**: Start/stop/restart OpenList and Rclone services
-- **Configuration Management**: GUI-based configuration for all services
-- **Log Monitoring**: Real-time log viewing and management
-- **Update Management**: Automatic update checking and installation
-- **Auto-startup**: Configure applications to start with system boot
-
-:::
-
-:::zh-CN
+### 管理功能
- **服务控制**:启动/停止/重启 OpenList 和 Rclone 服务
- **配置管理**:所有服务的基于 GUI 的配置
@@ -74,79 +31,23 @@ top: 980
- **更新管理**:自动更新检查和安装
- **自动启动**:配置应用程序与系统一起启动
-:::
-
-## Installation { lang="en" }
-
-## 安装 { lang="zh-CN" }
-
-### System Requirements { lang="en" }
-
-### 系统要求 { lang="zh-CN" }
-
-:::en
+## 安装
-- **Operating System**: Windows 10+, macOS 10.15+, or Linux (Ubuntu 18.04+)
-
-:::
-
-:::zh-CN
+### 系统要求
- **操作系统**:Windows 10+、macOS 10.15+ 或 Linux(Ubuntu 18.04+)
-:::
-
-### Download Options { lang="en" }
-
-### 下载选项 { lang="zh-CN" }
-
-#### GitHub Releases (Recommended) { lang="en" }
+### 下载选项
-#### GitHub 发行版(推荐) { lang="zh-CN" }
+#### GitHub 发行版(推荐)
-:::en
-Download the latest release from [GitHub Releases](https://github.com/OpenListTeam/OpenList-Desktop/releases):
-
-- **Windows**: `OpenList-Desktop_x.x.x_{arch}-setup.exe`
-- **macOS**: `OpenList-Desktop_x.x.x_{arch}.dmg`
-- **Linux**: `OpenList-Desktop_x.x.x_{arch}.deb` or `OpenList-Desktop_x.x.x_{arch}.rpm`
-
-:::
-
-:::zh-CN
从 [GitHub Releases](https://github.com/OpenListTeam/OpenList-Desktop/releases) 下载最新版本:
- **Windows**:`OpenList-Desktop_x.x.x_{arch}-setup.exe`
- **macOS**:`OpenList-Desktop_x.x.x_{arch}.dmg`
- **Linux**:`OpenList-Desktop_x.x.x_{arch}.deb` 或 `OpenList-Desktop_x.x.x_{arch}.rpm`
-:::
-
-#### Build from Source { lang="en" }
-
-#### 从源码构建 { lang="zh-CN" }
-
-:::en
-
-```bash
-# Clone the repository
-git clone https://github.com/OpenListTeam/OpenList-Desktop.git
-cd openlist-desktop
-
-# Install dependencies
-yarn install
-
-# Prepare development environment
-yarn run prebuild:dev
-
-# Build the application
-yarn run build
-yarn run tauri build
-```
-
-:::
-
-:::zh-CN
+#### 从源码构建
```bash
# 克隆仓库
@@ -164,98 +65,31 @@ yarn run build
yarn run tauri build
```
-:::
-
-### Installation Steps { lang="en" }
-
-### 安装步骤 { lang="zh-CN" }
-
-#### Windows { lang="en" }
-
-#### Windows { lang="zh-CN" }
+### 安装步骤
-##### Using Installer { lang="en" }
+#### Windows
-##### 使用安装程序 { lang="zh-CN" }
-
-:::en
-
-1. Download the `.exe` installer
-2. Run the installer as Administrator
-3. Follow the installation wizard
-4. Launch from Start Menu or Desktop shortcut
-
-:::
-
-:::zh-CN
+##### 使用安装程序
1. 下载 `.exe` 安装程序
2. 以管理员身份运行安装程序
3. 按照安装向导进行操作
4. 从开始菜单或桌面快捷方式启动
-:::
-
-##### Using Winget { lang="en" }
-
-##### 使用 Winget { lang="zh-CN" }
-
-:::en
+##### 使用 Winget
```bash
winget install OpenListTeam.OpenListDesktop
```
-:::
-
-:::zh-CN
-
-```bash
-winget install OpenListTeam.OpenListDesktop
-```
-
-:::
-
-#### macOS { lang="en" }
-
-#### macOS { lang="zh-CN" }
-
-:::en
-
-1. Download the `.dmg` file
-2. Open the DMG and drag OpenList Desktop to Applications
-3. Right-click and select "Open" (first time only)
-4. Grant necessary permissions when prompted
-
-:::
-
-:::zh-CN
+#### macOS
1. 下载 `.dmg` 文件
2. 打开 DMG 并将 OpenList Desktop 拖到应用程序文件夹
3. 右键单击并选择"打开"(仅首次)
4. 在提示时授予必要权限
-:::
-
-#### Linux { lang="en" }
-
-#### Linux { lang="zh-CN" }
-
-:::en
-
-1. Download the `.deb` or `.rpm` package
-2. Use your package manager to install:
-
- ```bash
- sudo dpkg -i OpenList-Desktop_x.x.x_amd64.deb
- # or
- sudo rpm -i OpenList-Desktop_x.x.x_amd64.rpm
- ```
-
-:::
-
-:::zh-CN
+#### Linux
1. 下载 `.deb` 或 `.rpm` 包
2. 使用包管理器安装:
@@ -266,27 +100,9 @@ winget install OpenListTeam.OpenListDesktop
sudo rpm -i OpenList-Desktop_x.x.x_amd64.rpm
```
-:::
-
-## Usage { lang="en" }
-
-## 使用说明 { lang="zh-CN" }
-
-### First Launch { lang="en" }
-
-### 首次启动 { lang="zh-CN" }
+## 使用说明
-:::en
-
-It is recommended to run OpenList Desktop with Administrator privileges on first launch to ensure proper service installation and configuration.
-
-1. **Initial Setup**: On first launch, the application will guide you through initial configuration
-2. **Service Installation**: Install the OpenList service when prompted
-3. **Storage Configuration**: Configure your first cloud storage connection
-
-:::
-
-:::zh-CN
+### 首次启动
建议在首次启动时通过管理员权限运行 OpenList Desktop,以确保正确安装和配置服务。
@@ -294,53 +110,16 @@ It is recommended to run OpenList Desktop with Administrator privileges on first
2. **服务安装**:在提示时安装 OpenList 服务
3. **存储配置**:配置您的第一个云存储连接
-:::
-
-### Basic Operations { lang="en" }
+### 基本操作
-### 基本操作 { lang="zh-CN" }
-
-#### Starting Services { lang="en" }
-
-#### 启动服务 { lang="zh-CN" }
-
-:::en
-
-```bash
-Dashboard → Quick Actions → Start OpenList Core
-Dashboard → Quick Actions → Start Rclone Backend
-```
-
-:::
-
-:::zh-CN
+#### 启动服务
```bash
仪表板 → 快速操作 → 启动 OpenList 核心
仪表板 → 快速操作 → 启动 Rclone 后端
```
-:::
-
-#### Adding Cloud Storage { lang="en" }
-
-#### 添加云存储 { lang="zh-CN" }
-
-:::en
-
-1. Navigate to **Mount** tab
-2. Click **Add Remote** button
-3. Configure storage settings:
- - **Name**: Unique identifier for your storage
- - **Type**: Storage provider (WebDAV)
- - **URL**: Storage endpoint URL
- - **Credentials**: Username and password
- - **Mount Point**: Local directory path
-4. Click **Save** and **Mount**
-
-:::
-
-:::zh-CN
+#### 添加云存储
1. 导航到 **挂载** 选项卡
2. 点击 **添加远程** 按钮
@@ -352,70 +131,15 @@ Dashboard → Quick Actions → Start Rclone Backend
- **挂载点**:本地目录路径
4. 点击 **保存** 和 **挂载**
-:::
-
-#### Monitoring Operations { lang="en" }
-
-#### 监控操作 { lang="zh-CN" }
-
-:::en
-
-- **Service Status**: Check the dashboard for service health indicators
-- **Logs**: Use the Logs tab to monitor system operations
-- **Performance**: View uptime and response metrics on the dashboard
-
-:::
-
-:::zh-CN
+#### 监控操作
- **服务状态**:检查仪表板上的服务健康指示器
- **日志**:使用日志选项卡监控系统操作
- **性能**:在仪表板上查看运行时间和响应指标
-:::
+## 本地开发
-## Local Development { lang="en" }
-
-## 本地开发 { lang="zh-CN" }
-
-### Prerequisites { lang="en" }
-
-### 环境要求 { lang="zh-CN" }
-
-:::en
-
-- **Node.js**: v22+ with yarn
-- **Rust**: Latest nightly version
-- **Git**: Version control
-
-1. **Clone the repository**
-
- ```bash
- git clone https://github.com/OpenListTeam/OpenList-Desktop.git
- cd openlist-desktop
- ```
-
-2. **Install dependencies**
-
- ```bash
- yarn install
- ```
-
-3. **Prepare development environment**
-
- ```bash
- yarn run prebuild:dev
- ```
-
-4. **Start development server**
-
- ```bash
- yarn tauri dev
- ```
-
-:::
-
-:::zh-CN
+### 环境要求
- **Node.js**:v22+ 和 yarn
- **Rust**:最新 nightly 版本
@@ -446,23 +170,7 @@ Dashboard → Quick Actions → Start Rclone Backend
yarn tauri dev
```
-:::
-
-### Building { lang="en" }
-
-### 构建 { lang="zh-CN" }
-
-:::en
-
-```bash
-# Build the application
-yarn run build
-yarn run tauri build
-```
-
-:::
-
-:::zh-CN
+### 构建
```bash
# 构建应用程序
@@ -470,31 +178,10 @@ yarn run build
yarn run tauri build
```
-:::
+## 许可证与法律
-## License & Legal { lang="en" }
+### 许可证
-## 许可证与法律 { lang="zh-CN" }
-
-### License { lang="en" }
-
-### 许可证 { lang="zh-CN" }
-
-:::en
-This desktop application project is licensed under the **[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html)**.
-
-- **Freedom to Use**: You can use, modify, and distribute this application
-- **Copyleft**: Any derivative works must also be licensed under GPL-3.0
-- **Source Code**: You must provide source code when distributing the application
-- **Attribution**: You must preserve copyright notices and license information
-
-For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Desktop/blob/main/LICENSE) file.
-
-By contributing to this project, you agree that your contributions will be licensed under the same GPL-3.0 license.
-
-:::
-
-:::zh-CN
本桌面应用程序项目采用 **[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html)** 许可证。
- **使用自由**:您可以使用、修改和分发此应用程序
@@ -505,5 +192,3 @@ By contributing to this project, you agree that your contributions will be licen
完整的许可证文本请参见 [LICENSE](https://github.com/OpenListTeam/OpenList-Desktop/blob/main/LICENSE) 文件。
通过为本项目做出贡献,您同意您的贡献将采用相同的 GPL-3.0 许可证。
-
-:::
diff --git a/pages/ecosystem/official_docs.md b/pages/ecosystem/official_docs.md
index a8cf7d714..9fdb3c5d2 100644
--- a/pages/ecosystem/official_docs.md
+++ b/pages/ecosystem/official_docs.md
@@ -1,101 +1,28 @@
---
-title:
- en: OpenList Docs
- zh-CN: OpenList Docs
categories:
- ecosystem
- eco_official
top: 990
---
-## What is OpenList Docs { lang="en" }
+# OpenList Docs
-## OpenList Docs 是什么 { lang="zh-CN" }
+## OpenList Docs 是什么
### [OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs)
-:::en
-[OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) is the official documentation website for OpenList, led by [@cxw620](https://github.com/cxw620) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-Docs/graphs/contributors). Built with Valaxy framework, it provides comprehensive documentation for OpenList, including installation guides, configuration instructions, API references, and ecosystem information. The documentation supports multiple languages and features real-time builds from the GitHub repository.
+[OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) 是 OpenList 的官方文档网站,由 [@cxw620](https://github.com/cxw620) 牵头,和其他[主要贡献者](https://github.com/OpenListTeam/OpenList-Docs/graphs/contributors)共同协作完成。基于 VitePress 构建,为 OpenList 提供全面的文档,包括安装指南、配置说明、API 参考和生态系统信息。文档支持多种语言,并基于 GitHub 仓库实时构建。
-:::
+## 如何使用 OpenList Docs
-:::zh-CN
-[OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) 是 OpenList 的官方文档网站,由 [@cxw620](https://github.com/cxw620) 牵头,和其他[主要贡献者](https://github.com/OpenListTeam/OpenList-Docs/graphs/contributors)共同协作完成。基于 Valaxy 框架构建,为 OpenList 提供全面的文档,包括安装指南、配置说明、API 参考和生态系统信息。文档支持多种语言,并基于 GitHub 仓库实时构建。
-
-:::
-
-## How to use OpenList Docs { lang="en" }
-
-## 如何使用 OpenList Docs { lang="zh-CN" }
-
-:::en
-You can directly access [doc.oplist.org.cn](https://doc.oplist.org.cn/) to view the documentation.
-
-:::
-
-:::zh-CN
可直接在线访问[doc.oplist.org.cn](https://doc.oplist.org.cn/) 查阅文档。
-:::
-
-## Local Development { lang="en" }
-
-### Prerequisites { lang="en" }
-
-:::en
-
-- **Node.js**: Required for running the development environment
-- **pnpm**: Recommended package manager
-- **Git**: For version control and cloning the repository
-
-1. **Clone the repository**
+## 本地开发
- ```bash
- git clone https://github.com/OpenListTeam/OpenList-Docs.git
- cd OpenList-Docs
- ```
-
-2. **Install dependencies**
+### 环境要求
- ```bash
- pnpm install
- ```
-
-3. **Start development server**
-
- ```bash
- pnpm dev
- ```
-
-4. **Open in browser**
-
- The documentation site will be available at `http://localhost:4859`
-
-:::
-
-### Building { lang="en" }
-
-:::en
-In Windows, you may need to run `npm install -g win-node-env` to solve the `NODE_OPTIONS` environment variable problem.
-
-```bash
-# Build static site
-pnpm build
-
-# Preview build
-pnpm serve
-```
-
-:::
-
-## 本地开发 { lang="zh-CN" }
-
-### 环境要求 { lang="zh-CN" }
-
-:::zh-CN
-
-- **Node.js**:运行开发环境所需
-- **pnpm**:推荐的包管理器
+- **Node.js** 24 或更高版本(见 `.nvmrc`)
+- **pnpm**:包管理器
- **Git**:用于版本控制和克隆仓库
1. **克隆仓库**
@@ -119,156 +46,60 @@ pnpm serve
4. **在浏览器中打开**
- 文档站点将在 `http://localhost:4859` 处可用
-
-:::
-
-### 构建 { lang="zh-CN" }
+ 文档站点将在 `http://localhost:5173` 可用
-:::zh-CN
-在Windows操作系统下,可能需要运行`npm install -g win-node-env`解决`NODE_OPTIONS`环境变量问题。
+### 构建
```bash
-# 构建静态站点
+# 构建静态站点到 dist/
pnpm build
-# 预览构建
-pnpm serve
+# 预览构建结果
+pnpm preview
```
-:::
-
-### Development Tips { lang="en" }
-
-:::en
-`:::tip` Markdown Parsing Issues
-When writing documentation, please note these important parsing rules:
+### 编写提示
-1. **Language Block Syntax**: For language-specific content blocks, only use one closing `:::` at the end:
+本站使用 [VitePress](https://vitepress.dev/zh/) 构建,其 [Markdown 扩展](https://vitepress.dev/zh/guide/markdown) 均可直接使用。
- 
- 
+1. **每种语言一个文件**:中文页面位于 `pages/`,英文页面位于 `pages/en/` 下相同的相对路径,例如 `pages/guide/drivers/s3.md` 与 `pages/en/guide/drivers/s3.md`。修改页面时请同时更新两个文件。
- The above should be written as:
+2. **页面标题**:正文第一行即为标题,使用一级标题(`# 标题`),不要在 frontmatter 中添加 `title`。
- 
- 
+3. **侧边栏**:frontmatter 中设置了 `categories` 的页面会显示在侧边栏,并按 `top` 由高到低排序:
- The language will automatically switch when encountering `:::en`.
+ ```md
+ ---
+ top: 895
+ categories:
+ - guide
+ - drivers
+ ---
-2. **Title Language Specification**: Titles must use `{ lang="en" }` syntax and cannot use language blocks:
-
- 
- 
-
- Do NOT use:
-
- 
- 
-
-3. **Text Format Convention**: For better readability in plain text environments, please follow the **English first, then Chinese** order when writing bilingual content. This makes it easier to observe and navigate the documentation structure in text editors and version control systems.
-
-4. **Line Break Before Closing `:::`**: Always add a line break before the closing `:::`, especially when using lists (`li`), otherwise formatting may be corrupted:
-
- 
- 
-
- The above should be written as:
-
- 
- 
-
-5. **Empty Line for Line Breaks**: Content needs an empty line to create line breaks. Without empty lines, content will render as continuous text:
-
- 
- 
-
- The above should be written as:
-
- 
- 
-
- Note: Lists (`li`) are not affected by this issue.
-
-:::
-
-### 开发提示 { lang="zh-CN" }
-
-:::zh-CN
-`:::tip` Markdown 解析问题
-在编写文档时,请注意以下重要的解析规则:
-
-1. **语言块语法**:对于特定语言的内容块,结尾只需要一个 `:::`:
-
- 
- 
-
- 上面的写法应该改为:
-
- 
- 
-
- 当遇到 `:::en` 时语言会自动切换。
-
-2. **标题语言指定**:标题必须使用 `{ lang="en" }` 语法,不能使用语言块:
-
- 
- 
-
- 不要使用:
-
- 
- 
-
-3. **文本格式约定**:为了方便在纯文本环境下的观察起见,在编写双语内容时请遵循**先英文后中文**的顺序。这样可以更容易在文本编辑器和版本控制系统中观察和导航文档结构。
-
-4. **结束块 `:::` 前换行**:结束块的 `:::` 前最好换行,尤其是使用了列表(`li`),否则会被格式化乱掉:
-
- 
- 
-
- 上面的写法应该改为:
-
- 
- 
-
-5. **内容换行需要空行**:内容需要空一行才能换行。没有空行的话,内容会渲染成连续的文本:
-
- 
- 
-
- 上面的写法应该改为:
-
- 
- 
-
- 注意:列表(`li`)不涉及这个问题。
-
-:::
-
-## License & Legal { lang="en" }
-
-### License { lang="en" }
-
-:::en
-This documentation project is licensed under the **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)**.
+ # 对象存储(S3)
+ ```
-- **Freedom to Use**: You can use, modify, and distribute this documentation
-- **Copyleft**: Any derivative works must also be licensed under AGPL-3.0
-- **Network Use**: If you run a modified version on a server, you must provide the source code
-- **Attribution**: You must preserve copyright notices and license information
+4. **嵌套容器**:当 `::: tip` 等容器内还包含其他容器时,外层需要使用更多的冒号,否则第一个 `:::` 会直接关闭外层容器:
-For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Docs/blob/main/LICENSE) file.
+ ```md
+ :::: details 示例
+ ::: tip
+ 内层提示
+ :::
+ ::::
+ ```
-By contributing to this project, you agree that your contributions will be licensed under the same AGPL-3.0 license.
+5. **浅色 / 深色图片**:在图片链接后添加 `#light` / `#dark`,图片只会在对应的颜色模式下显示:
-:::
+ ```md
+ 
+ 
+ ```
-## 许可证与法律 { lang="zh-CN" }
+## 许可证与法律
-### 许可证 { lang="zh-CN" }
+### 许可证
-:::zh-CN
本文档项目采用 **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)** 许可证。
- **使用自由**:您可以使用、修改和分发此文档
@@ -279,5 +110,3 @@ By contributing to this project, you agree that your contributions will be licen
完整的许可证文本请参见 [LICENSE](https://github.com/OpenListTeam/OpenList-Docs/blob/main/LICENSE) 文件。
通过为本项目做出贡献,您同意您的贡献将采用相同的 AGPL-3.0 许可证。
-
-:::
diff --git a/pages/ecosystem/official_mobile.md b/pages/ecosystem/official_mobile.md
index 1af52ea50..b5447819d 100644
--- a/pages/ecosystem/official_mobile.md
+++ b/pages/ecosystem/official_mobile.md
@@ -1,44 +1,19 @@
---
-title:
- en: OpenList Mobile
- zh-CN: OpenList Mobile
categories:
- ecosystem
- eco_official
top: 975
---
-## What is OpenList Mobile { lang="en" }
+# OpenList Mobile
-## OpenList Mobile 是什么 { lang="zh-CN" }
+## OpenList Mobile 是什么
### [OpenListTeam/OpenList-Mobile](https://github.com/OpenListTeam/OpenList-Mobile)
-:::en
-[OpenListTeam/OpenList-Mobile](https://github.com/OpenListTeam/OpenList-Mobile) is a mobile file server application based on [OpenList](https://github.com/OpenListTeam/OpenList), built with Flutter framework. It turns your phone into a powerful file server with LAN file sharing, remote access, and online management capabilities. The application is collaboratively developed by the [main contributors](https://github.com/OpenListTeam/OpenList-Mobile/graphs/contributors) and features automatic updates that sync with the latest OpenList releases daily.
-
-:::
-
-:::zh-CN
[OpenListTeam/OpenList-Mobile](https://github.com/OpenListTeam/OpenList-Mobile) 是一个基于 [OpenList](https://github.com/OpenListTeam/OpenList) 的移动端文件服务器应用,使用 Flutter 框架开发。它可以将您的手机变成一个强大的文件服务器,支持局域网文件共享、远程访问和在线管理功能。该应用由[主要贡献者](https://github.com/OpenListTeam/OpenList-Mobile/graphs/contributors)共同协作开发,具有自动更新功能,每日与最新的 OpenList 版本同步。
-:::
-
-## Features { lang="en" }
-
-## 功能特性 { lang="zh-CN" }
-
-:::en
-
-- **Mobile File Server**: Turn your mobile device into a file server
-- **LAN File Sharing**: Share files within local network
-- **Remote Access**: Access your files with internet connection
-- **Online Management**: Web-based file management interface
-- **Auto-Update**: Automatically syncs with latest OpenList releases
-
-:::
-
-:::zh-CN
+## 功能特性
- **移动文件服务器**:将您的移动设备变成文件服务器
- **局域网文件共享**:在本地网络内共享文件
@@ -46,134 +21,42 @@ top: 975
- **在线管理**:基于 Web 的文件管理界面
- **自动更新**:自动与最新的 OpenList 版本同步
-:::
-
-## Installation { lang="en" }
-
-## 安装 { lang="zh-CN" }
-
-### System Requirements { lang="en" }
-
-### 系统要求 { lang="zh-CN" }
-
-:::en
+## 安装
-- **Storage**: Minimum 100MB free space
-- **Permissions**: Storage access permission required
-
-:::
-
-:::zh-CN
+### 系统要求
- **存储空间**:至少 100MB 可用空间
- **权限**:需要存储访问权限
-:::
-
-### Download Options { lang="en" }
-
-### 下载选项 { lang="zh-CN" }
-
-#### GitHub Releases (Recommended) { lang="en" }
-
-#### GitHub 发行版(推荐) { lang="zh-CN" }
+### 下载选项
-:::en
-Download the latest release from [GitHub Releases](https://github.com/OpenListTeam/OpenList-Mobile/releases):
+#### GitHub 发行版(推荐)
-- **Stable Release**: [Latest Release](https://github.com/OpenListTeam/OpenList-Mobile/releases/latest) - Recommended for production use
-- **Development Build**: [Development Build](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/build.yaml) - Latest features and fixes
-
-:::
-
-:::zh-CN
从 [GitHub Releases](https://github.com/OpenListTeam/OpenList-Mobile/releases) 下载最新版本:
- **稳定版本**:[发布版](https://github.com/OpenListTeam/OpenList-Mobile/releases/latest) - 推荐生产环境使用
- **开发版本**:[构建版](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/build.yaml) - 最新功能和修复
-:::
-
-#### Auto-Update Feature { lang="en" }
-
-#### 自动更新功能 { lang="zh-CN" }
-
-:::en
-
-**Auto-Update**: [GitHub Actions](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/sync_openlist.yaml) automatically checks for the latest [OpenList](https://github.com/OpenListTeam/OpenList/releases) version twice daily (5 AM & 5 PM) and builds releases, ensuring you always have access to the latest version.
-
-:::
-
-:::zh-CN
+#### 自动更新功能
**自动更新**:[GitHub Actions](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/sync_openlist.yaml) 每日早晚五点自动检查最新的 [OpenList](https://github.com/OpenListTeam/OpenList/releases) 版本并构建发布,确保始终使用最新版本。
-:::
-
-### Installation Steps { lang="en" }
-
-### 安装步骤 { lang="zh-CN" }
-
-#### Android { lang="en" }
-
-#### Android { lang="zh-CN" }
+### 安装步骤
-:::en
-
-1. Download the `.apk` file from releases
-2. Enable "Install from unknown sources" in Android settings
-3. Install the APK file
-
-:::
-
-:::zh-CN
+#### Android
1. 从发布页面下载 `.apk` 文件
2. 在 Android 设置中启用"允许安装未知来源应用"
3. 安装 APK 文件
-:::
-
-#### iOS { lang="en" }
-
-#### iOS { lang="zh-CN" }
-
-:::en
-
-iOS support is currently experimental and still in development.
-
-:::
-
-:::zh-CN
+#### iOS
iOS 支持目前处于实验阶段,仍在开发中。
-:::
-
-## License & Legal { lang="en" }
-
-## 许可证与法律 { lang="zh-CN" }
-
-### License { lang="en" }
+## 许可证与法律
-### 许可证 { lang="zh-CN" }
+### 许可证
-:::en
-This mobile application project is licensed under the **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)**.
-
-- **Freedom to Use**: You can use, modify, and distribute this application
-- **Copyleft**: Any derivative works must also be licensed under AGPL-3.0
-- **Network Use**: If you run a modified version on a server, you must provide source code to users
-- **Source Code**: You must provide source code when distributing the application
-- **Attribution**: You must preserve copyright notices and license information
-
-For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Mobile/blob/main/LICENSE) file.
-
-By contributing to this project, you agree that your contributions will be licensed under the same AGPL-3.0 license.
-
-:::
-
-:::zh-CN
本移动应用程序项目采用 **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)** 许可证。
- **使用自由**:您可以使用、修改和分发此应用程序
@@ -185,5 +68,3 @@ By contributing to this project, you agree that your contributions will be licen
完整的许可证文本请参见 [LICENSE](https://github.com/OpenListTeam/OpenList-Mobile/blob/main/LICENSE) 文件。
通过为本项目做出贡献,您同意您的贡献将采用相同的 AGPL-3.0 许可证。
-
-:::
diff --git a/pages/ecosystem/official_proxy.md b/pages/ecosystem/official_proxy.md
index 509795787..c5098f46c 100644
--- a/pages/ecosystem/official_proxy.md
+++ b/pages/ecosystem/official_proxy.md
@@ -1,38 +1,18 @@
---
-title:
- en: OpenList Proxy
- zh-CN: OpenList Proxy
categories:
- ecosystem
- eco_official
top: 960
---
-## What is OpenList Proxy { lang="en" }
+# OpenList Proxy
-## OpenList Proxy 是什么 { lang="zh-CN" }
+## OpenList Proxy 是什么
-:::en
-[**OpenList Proxy**](https://github.com/OpenListTeam/OpenList-Proxy) is a simple implementation for proxying OpenList's **download traffic**. With this tool, you can isolate the server traffic of the OpenList deployment from the traffic required for downloads, thereby reducing the traffic consumption of the main server or speeding up downloads.
-
-:::
-:::zh-CN
[**OpenList Proxy**](https://github.com/OpenListTeam/OpenList-Proxy),是一个用于代理OpenList的**下载流量**的简易实现,通过该工具,可以将部署OpenList的服务器流量和下载所需要的流量隔离开,从而降低对主服务器的流量消耗或加快下载速度。
-:::
-
-## How to use OpenList Proxy { lang="en" }
+## 如何使用 OpenList Proxy
-## 如何使用 OpenList Proxy { lang="zh-CN" }
-
-:::en
-:::danger
-Cloudflare has explicitly prohibited the use of Workers for proxy operations. Quick deployments implemented on CF-Worker should be used for **experimental** and **temporary testing** purposes only, and not for long-term or high-traffic.
-
-OpenList is not responsible for any consequences resulting from the use
-
-:::
-:::zh-CN
:::danger
CloudFlare已明确禁止使用Worker作为代理流量使用,对于在CF-Worker上实现的快速部署,应当时基于**实验性质**的**临时测试**,而非生产环境下使用长期、大流量使用。
@@ -40,33 +20,13 @@ OpenList对于使用该Worker造成的任何后果均不负责。
:::
-:::en
-For OpenList Proxy, we provide two deployment methods:
-
-- cf-worker
-- Binary File Deployment
-
-:::
-:::zh-CN
对于OpenList Proxy,我们提供了两种部署方式
- cf-worker
- 二进制文件部署
-:::
-
-### Cloudflare Worker { lang="en" }
+### ~~科赋锐~~Cloudflare Worker
-### ~~科赋锐~~Cloudflare Worker { lang="zh-CN" }
-
-:::en
-:::tip
-In the new version, environment-based configuration has been introduced. Please configure the environment variables as required after deployment.
-
-Do not use "/" at the end of the address.
-
-:::
-:::zh-CN
:::tip
在新版本中引入了基于环境的配置,请在部署完成后按照要求配置好环境变量。
@@ -74,35 +34,6 @@ Do not use "/" at the end of the address.
:::
-:::en
-
-- Simple Worker Deployment Tutorial On the Cloudflare homepage, select "Workers and Pages",
- then click "Create" and choose "Start from Hello World!".
- After deployment, select "Edit Code", go to here, replace the code, and click "Deploy" again.
-
-- (Optional) Configure Domain Go to the Worker configuration page, click "Settings", then click "Add" next to Domains and Routes. Enter the configured subdomain. Use a CNAME record for the corresponding subdomain to point to the workers.dev domain.
-
-- Configure Environment Variables Go to the Worker configuration page,
- click "Settings", then select "Add" next to Variables and Secrets.
- Copy the following into the variable names:
-
- ```env
- ADDRESS=https://your-openlist-server.com
- TOKEN=your-api-token-here
- WORKER_ADDRESS=https://your-worker-address
- DISABLE_SIGN=false
- ```
-
-- ADDRESS is the address of your OpenList instance, only ports 443 and 80 are supported.
- WORKER_ADDRESS is the address of the Worker. If you have bound a custom domain, use the custom domain. This is also the proxy address needed in OpenList.
- If DISABLE_SIGN is set to true, Proxy will not verify signatures, and anyone who knows the file path and Proxy address can access the file. Please use with caution.
- It is recommended to set TOKEN as a secret type. In OpenList, go to Settings → Others at the bottom; this token is long-term valid and has full permissions for OpenList.
-
-- CDN Configuration Suggestion: Keep ADDRESS and WORKER_ADDRESS configured as the origin addresses.
-
-:::
-:::zh-CN
-
- 部署worker简易教程
在Cloudflare的主页选择“Workers 和 Pages”,然后点击“创建”,选择“从Hello World!开始”
部署完成后选择“编辑代码”,进入[这里](https://github.com/OpenListTeam/OpenList-Proxy/blob/main/openlist-proxy.js),将代码替换后再次点击“部署”。
@@ -130,49 +61,12 @@ Do not use "/" at the end of the address.
- 对于CDN的配置建议:`ADDRESS`、`WORKER_ADDRESS`配置保留为源站地址。
-:::
-
-### Binary File Deployment { lang="en" }
-
-### 二进制文件部署 { lang="zh-CN" }
-
-:::en
+### 二进制文件部署
-Download the [binary package](https://github.com/OpenListTeam/OpenList-Proxy/releases) and run the command `./openlist-proxy -help` to learn how to use it.
-:::
-:::zh-CN
下载[二进制包](https://github.com/OpenListTeam/OpenList-Proxy/releases)后,使用`./openlist-proxy -help`命令自行学习使用。
-:::
-
-## How OpenList Proxy Works { lang="en" }
-
-## OpenList Proxy 的工作原理 { lang="zh-CN" }
+## OpenList Proxy 的工作原理
-:::en
-OpenList Proxy works by proxying the OpenList API to isolate the download traffic of OpenList. Its working principle is as follows:
-
-```mermaid
-sequenceDiagram
- participant Client as Client
- participant Proxy as Cloudflare Worker
- participant OpenList as OpenList Server
- participant Storage as File Storage
-
- Client->>Proxy: Download Request (with signature)
- Proxy->>Proxy: Verify signature and expiration time
- Proxy->>OpenList: Request file link (/api/fs/link)
- OpenList-->>Proxy: Return real download address
- Proxy->>Storage: Request file content
- Storage-->>Proxy: Return file stream
- Proxy-->>Client: Forward file content
-```
-
-Proxy verifies the signature and expiration time to ensure the legitimacy of the request. It then requests the file link from the OpenList server to obtain the real download address. After that, Proxy requests the file storage service for the file content and forwards it to the client.
-
-Proxy's signature can be disabled by setting the `DISABLE_SIGN` environment variable or flag. If signature verification is disabled, Proxy will not check the signature and expiration time, allowing anyone who knows the file path and Proxy address to bypass OpenList's own signature verification (which can be configured in the management interface) to access the file. Please use this feature with caution.
-:::
-:::zh-CN
OpenList Proxy 通过对 OpenList 的 API 进行代理,来实现对 OpenList 的下载流量的隔离。其工作原理如下:
```mermaid
@@ -194,4 +88,3 @@ sequenceDiagram
Proxy 通过验证签名和过期时间,确保请求的合法性。然后,它向 OpenList 服务器请求文件链接,并获取真实的下载地址。接着,Proxy 请求文件存储服务获取文件内容,并将其转发给客户端。
Proxy的签名可以通过`DISABLE_SIGN`环境变量或flag来禁用,如果禁用签名,Proxy将不会验证签名和过期时间,这样任何人都可以通过知道文件路径和Proxy地址来绕过OpenList本身的签名验证(其本身的签名可以在管理界面配置)获取文件。请谨慎开启此功能。
-:::
diff --git a/pages/ecosystem/official_worker/about.md b/pages/ecosystem/official_worker/about.md
index 3ff06fb42..300138743 100644
--- a/pages/ecosystem/official_worker/about.md
+++ b/pages/ecosystem/official_worker/about.md
@@ -1,63 +1,26 @@
---
-title:
- en: FAQ
- zh-CN: 常见问题
categories:
- ecosystem
- eco_worker
top: 971
---
-## FAQ { lang="en" }
+# 常见问题
-## 常见问题 { lang="zh-CN" }
-
-:::en
-
-### The install wizard doesn't appear on first visit
-
-Make sure `ADMIN_PASS` is **not** set — when it is set, the worker auto-initializes and skips the wizard. Clear the variable and redeploy, then revisit the site.
-:::
-
-:::zh-CN
+## 常见问题
### 首次访问没有出现安装向导
确认 `ADMIN_PASS` **未配置**——配置后 Worker 会自动初始化并跳过向导。清除该变量后重新部署,再次访问即可进入向导。
-:::
---
-:::en
-
-### Cloudflare reports "unable to fetch repository content"
-
-You are trying to deploy directly from the upstream `OpenListTeam/OpenList-Worker` repository. Cloudflare Workers only allows deploying from repositories you own. [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) the project first, then connect your fork.
-:::
-
-:::zh-CN
-
### Cloudflare 提示"无法获取存储库内容"
你正在尝试直接从上游 `OpenListTeam/OpenList-Worker` 仓库部署。Cloudflare Workers 只允许部署你自己拥有的仓库。请先 [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) 项目,再连接你的 Fork 仓库。
-:::
-
---
-:::en
-
-### Settings are lost after redeployment / page refresh
-
-This usually means no persistent storage is configured. Check:
-
-1. `DB_DRIVER` is set (not `memory`)
-2. The corresponding binding (KV / D1 / Blob) is correctly bound in the platform dashboard
-3. For EdgeOne, the default `auto` driver should auto-detect Blob — if not, explicitly set `DB_DRIVER=blob`
- :::
-
-:::zh-CN
-
### 重新部署 / 刷新页面后设置丢失
通常意味着没有配置持久化存储。检查:
@@ -65,24 +28,9 @@ This usually means no persistent storage is configured. Check:
1. `DB_DRIVER` 已设置(不是 `memory`)
2. 对应绑定(KV / D1 / Blob)已在平台后台正确绑定
3. EdgeOne 默认的 `auto` 驱动应能自动探测 Blob——若不行,请显式设置 `DB_DRIVER=blob`
- :::
---
-:::en
-
-### How do I reset the admin password?
-
-If you can still log in, go to **Management → Users** to change the password.
-
-If you are locked out:
-
-1. Set the `ADMIN_PASS` environment variable to a new password and redeploy.
-2. After logging in, remove the variable and redeploy again to re-enable the install wizard on next cold start (or leave it set as a permanent password).
- :::
-
-:::zh-CN
-
### 如何重置管理员密码?
如果你还能登录,前往 **管理 → 用户** 修改密码即可。
@@ -91,24 +39,9 @@ If you are locked out:
1. 将 `ADMIN_PASS` 环境变量设为新密码并重新部署。
2. 登录后删除该变量再次部署,下次冷启动时将重新启用安装向导(或保留该变量作为永久密码)。
- :::
---
-:::en
-
-### CORS errors when accessing the API from a custom domain
-
-Add `ALLOW_URLS` as an environment variable with a comma-separated list of allowed origins, e.g.:
-
-```
-ALLOW_URLS=https://your-domain.com,https://www.your-domain.com
-```
-
-:::
-
-:::zh-CN
-
### 从自定义域名访问 API 时出现 CORS 错误
添加 `ALLOW_URLS` 环境变量,值为逗号分隔的允许来源列表,例如:
@@ -117,24 +50,8 @@ ALLOW_URLS=https://your-domain.com,https://www.your-domain.com
ALLOW_URLS=https://your-domain.com,https://www.your-domain.com
```
-:::
-
---
-:::en
-
-### `DB_FORMAT=sql` tables are not created automatically
-
-D1 tables are created via Drizzle migrations on first startup. Make sure:
-
-1. The D1 binding (`DB`) is correctly configured in `wrangler.toml` or the dashboard.
-2. After binding, trigger a cold start by redeploying.
-
-If using **Automatic resource provisioning**, omit `database_id` from the D1 binding and Wrangler (>= 4.45.0) will create the database automatically on deploy.
-:::
-
-:::zh-CN
-
### `DB_FORMAT=sql` 表未自动创建
D1 表通过 Drizzle 迁移在首次启动时创建。请确认:
@@ -143,23 +60,9 @@ D1 表通过 Drizzle 迁移在首次启动时创建。请确认:
2. 绑定后重新部署触发一次冷启动。
如果使用 **Automatic resource provisioning**,在 D1 绑定中省略 `database_id`,Wrangler(>= 4.45.0)会在部署时自动创建数据库。
-:::
---
-:::en
-
-### How do I migrate data from the Go backend to OpenList Worker?
-
-Use `DB_FORMAT=sql` + `DB_DRIVER=d1` (or `mysql`) with the fixed `x_` table prefix. The TS Worker and the Go backend share the same table schema, so you can:
-
-1. Export the Go backend's SQLite database.
-2. Import it into a Cloudflare D1 database via the Cloudflare dashboard or `wrangler d1 execute`.
-3. Configure the Worker to point to the same D1 database.
- :::
-
-:::zh-CN
-
### 如何将 Go 后端的数据迁移到 OpenList Worker?
使用固定的 `x_` 表名前缀,配合 `DB_FORMAT=sql` + `DB_DRIVER=d1`(或 `mysql`)。TS Worker 与 Go 后端共享相同的表 schema,因此:
@@ -167,42 +70,18 @@ Use `DB_FORMAT=sql` + `DB_DRIVER=d1` (or `mysql`) with the fixed `x_` table pref
1. 导出 Go 后端的 SQLite 数据库。
2. 通过 Cloudflare 控制台或 `wrangler d1 execute` 将其导入 Cloudflare D1 数据库。
3. 配置 Worker 指向同一个 D1 数据库即可。
- :::
---
-:::en
-
-### ESA EdgeKV settings revert after a few seconds
-
-This is caused by EdgeKV's eventual consistency. The Worker implements a module-level cache with a 60-second TTL to mitigate this. If the issue persists, wait ~60 seconds for the cache to expire and the setting to propagate across nodes.
-:::
-
-:::zh-CN
-
### 阿里云 ESA EdgeKV 设置几秒后回滚
这是 EdgeKV 最终一致性导致的。Worker 内置了 60 秒 TTL 的模块级缓存来缓解此问题。如果问题持续,等待约 60 秒让缓存过期、设置同步到各节点即可。
-:::
---
-:::en
-
-### Build fails with "pnpm: command not found"
-
-The deploy platform is using npm by default. Either:
-
-- Set the **install command** to `npm install --legacy-peer-deps` and **build command** to `npm run build`, or
-- Enable pnpm in the platform settings (e.g. Cloudflare Workers → Framework preset → set Node version to 18+)
- :::
-
-:::zh-CN
-
### 构建失败,提示 "pnpm: command not found"
部署平台默认使用 npm。可以:
- 将 **安装命令** 改为 `npm install --legacy-peer-deps`,**构建命令** 改为 `npm run build`,或者
- 在平台设置中启用 pnpm(例如 Cloudflare Workers → Framework preset → 设置 Node 版本为 18+)
- :::
diff --git a/pages/ecosystem/official_worker/basic.md b/pages/ecosystem/official_worker/basic.md
index 1b9f08d76..24a3a131e 100644
--- a/pages/ecosystem/official_worker/basic.md
+++ b/pages/ecosystem/official_worker/basic.md
@@ -1,125 +1,51 @@
---
-title:
- en: Architecture
- zh-CN: 设计架构
categories:
- ecosystem
- eco_worker
top: 978
---
-## Design Architecture { lang="en" }
+# 设计架构
-## 设计架构 { lang="zh-CN" }
+## 设计架构
-:::en
-OpenList Worker is a Serverless-first rewrite of the OpenList Go backend in TypeScript. The system is divided into three layers: edge runtime, data access, and frontend static assets.
-:::
-
-:::zh-CN
OpenList Worker 是将 OpenList Go 后端以 TypeScript 重写的 Serverless 优先架构。系统分为边缘运行时、数据访问和前端静态资源三层。
-:::
-
-## Tech Stack { lang="en" }
-
-## 技术栈 { lang="zh-CN" }
-
-### Backend { lang="en" }
-
-### 后端 { lang="zh-CN" }
-
-:::en
-| Component | Technology | Description |
-| :-------- | :--------- | :---------- |
-| HTTP framework | [Hono.js](https://hono.dev/) | Lightweight, edge-native web framework |
-| Runtime | Cloudflare Workers / EdgeOne Functions / ESA | Edge compute platforms |
-| Language | TypeScript | Fully typed, compiled via esbuild / Vite |
-| ORM | Drizzle ORM | Type-safe SQL query builder for D1 / MySQL |
-| Build tool | esbuild / Vite | Single-file Worker bundle |
-:::
-
-:::zh-CN
-| 组件 | 技术 | 说明 |
-| :--- | :--- | :--- |
-| HTTP 框架 | [Hono.js](https://hono.dev/) | 轻量级、边缘原生 Web 框架 |
-| 运行时 | Cloudflare Workers / EdgeOne 云函数 / ESA | 边缘计算平台 |
-| 语言 | TypeScript | 全类型,使用 esbuild / Vite 编译 |
-| ORM | Drizzle ORM | 为 D1 / MySQL 提供类型安全的 SQL 查询构建器 |
-| 构建工具 | esbuild / Vite | 单文件 Worker 产物 |
-:::
-
-### Frontend { lang="en" }
-
-### 前端 { lang="zh-CN" }
-
-:::en
-| Component | Technology | Description |
-| :-------- | :--------- | :---------- |
-| Framework | SolidJS + TypeScript | Reactive SPA frontend |
-| UI library | Hope UI (@hope-ui/solid) | Component library |
-| Build tool | Vite | Fast frontend build |
-| Bundled with | Workers Static Assets | Served from the same origin as the API |
-:::
-:::zh-CN
-| 组件 | 技术 | 说明 |
-| :--- | :--- | :--- |
-| 框架 | SolidJS + TypeScript | 响应式 SPA 前端 |
-| UI 库 | Hope UI(@hope-ui/solid) | 组件库 |
-| 构建工具 | Vite | 快速前端构建 |
-| 与 Worker 同源 | Workers Static Assets | API 与前端同源部署,无跨域问题 |
-:::
+## 技术栈
-## Data Storage { lang="en" }
+### 后端
-## 数据存储 { lang="zh-CN" }
+| 组件 | 技术 | 说明 |
+| :-------- | :---------------------------------------- | :------------------------------------------ |
+| HTTP 框架 | [Hono.js](https://hono.dev/) | 轻量级、边缘原生 Web 框架 |
+| 运行时 | Cloudflare Workers / EdgeOne 云函数 / ESA | 边缘计算平台 |
+| 语言 | TypeScript | 全类型,使用 esbuild / Vite 编译 |
+| ORM | Drizzle ORM | 为 D1 / MySQL 提供类型安全的 SQL 查询构建器 |
+| 构建工具 | esbuild / Vite | 单文件 Worker 产物 |
-### Storage Format (`DB_FORMAT`) { lang="en" }
+### 前端
-### 存储格式(`DB_FORMAT`) { lang="zh-CN" }
+| 组件 | 技术 | 说明 |
+| :------------- | :------------------------ | :----------------------------- |
+| 框架 | SolidJS + TypeScript | 响应式 SPA 前端 |
+| UI 库 | Hope UI(@hope-ui/solid) | 组件库 |
+| 构建工具 | Vite | 快速前端构建 |
+| 与 Worker 同源 | Workers Static Assets | API 与前端同源部署,无跨域问题 |
-:::en
-The `DB_FORMAT` variable controls how data is serialized:
+## 数据存储
-| Value | Description | Best for |
-| :-------------- | :---------------------------------------------------- | :-------------------------------------- |
-| `map` (default) | Whole object serialized as a single JSON value | KV / Blob storage |
-| `key` | Per-key storage, one record per entity | KV with high read frequency |
-| `sql` | Relational tables, identical schema to the Go backend | D1 / MySQL — enables Go ↔ TS migration |
+### 存储格式(`DB_FORMAT`)
-:::
-
-:::zh-CN
`DB_FORMAT` 控制数据序列化方式:
-| 值 | 说明 | 最适用场景 |
-| :------------ | :--------------------------------- | :----------------------------- |
-| `map`(默认) | 整对象序列化为单个 JSON 值 | KV / Blob 存储 |
-| `key` | 分 key 存储,每实体一条记录 | 高频读写 KV |
+| 值 | 说明 | 最适用场景 |
+| :------------ | :--------------------------------- | :---------------------------- |
+| `map`(默认) | 整对象序列化为单个 JSON 值 | KV / Blob 存储 |
+| `key` | 分 key 存储,每实体一条记录 | 高频读写 KV |
| `sql` | 关系表,与 Go 后端 schema 完全一致 | D1 / MySQL——支持 Go ↔ TS 迁移 |
-:::
-
-### Storage Driver (`DB_DRIVER`) { lang="en" }
-
-### 存储驱动(`DB_DRIVER`) { lang="zh-CN" }
-
-:::en
-The `DB_DRIVER` variable selects the physical storage backend:
-
-| Value | Platform | Description |
-| :--------------- | :----------------- | :------------------------------------------ |
-| `auto` (default) | Universal | Auto-detect: blob → cfkv → kv → d1 → memory |
-| `blob` | EdgeOne / ESA | EdgeOne Blob or Alibaba ESA Blob |
-| `cfkv` | Universal | Cloudflare KV via REST API (cross-platform) |
-| `kv` | Cloudflare Workers | Cloudflare KV binding |
-| `d1` | Cloudflare Workers | Cloudflare D1 (SQLite) |
-| `do` | Cloudflare Workers | Durable Objects (strong consistency) |
-| `mysql` | Node.js container | External MySQL / MariaDB |
+### 存储驱动(`DB_DRIVER`)
-:::
-
-:::zh-CN
`DB_DRIVER` 选择物理存储后端:
| 值 | 平台 | 说明 |
@@ -132,28 +58,8 @@ The `DB_DRIVER` variable selects the physical storage backend:
| `do` | Cloudflare Workers | Durable Objects(强一致性) |
| `mysql` | Node.js 容器 | 外部 MySQL / MariaDB |
-:::
-
-### SQL Table Alignment with Go Backend { lang="en" }
-
-### 与 Go 后端的 SQL 表对齐 { lang="zh-CN" }
-
-:::en
-When `DB_FORMAT = "sql"`, the TS Worker uses the same table names and schema as the Go backend (GORM, default prefix `x_`), so the two backends can share the same physical database:
+### 与 Go 后端的 SQL 表对齐
-| Go struct | Table name |
-| :------------ | :---------------- |
-| `SettingItem` | `x_setting_items` |
-| `SharingDB` | `x_sharing_dbs` |
-| `Storage` | `x_storages` |
-| `User` | `x_users` |
-| `Meta` | `x_metas` |
-| (TS only) | `x_plugins` |
-
-The prefix is fixed to `x_`, matching the Go backend default.
-:::
-
-:::zh-CN
当 `DB_FORMAT = "sql"` 时,TS Worker 使用与 Go 后端(GORM,默认前缀 `x_`)相同的表名与 schema,两个后端可共享同一物理数据库:
| Go 结构体 | 表名 |
@@ -166,35 +72,8 @@ The prefix is fixed to `x_`, matching the Go backend default.
| (仅 TS) | `x_plugins` |
表名前缀固定为 `x_`,与 Go 后端默认值一致。
-:::
-
-## Project Structure { lang="en" }
-
-## 项目结构 { lang="zh-CN" }
-:::en
-
-```
-OpenList-Worker/
-├── src/
-│ ├── backend/ # Hono.js Worker entry & backend logic
-│ │ ├── worker.ts # Cloudflare Workers entry
-│ │ ├── drivers/ # Storage driver implementations (kv / d1 / blob / mysql …)
-│ │ ├── server/ # Route registrations & middleware
-│ │ ├── pkg/ # Shared utilities & helpers
-│ │ └── internal/ # Core business logic (auth, storage, meta, …)
-│ └── frontend/ # Built-in frontend (SolidJS + Vite)
-├── dist/ # Build output (Worker bundle + frontend assets)
-├── esa-entry.ts # Alibaba Cloud ESA entry
-├── wrangler.toml # Cloudflare Workers configuration
-├── esa.jsonc # Alibaba Cloud ESA configuration
-├── edgeone.json # EdgeOne schedules configuration
-└── package.json
-```
-
-:::
-
-:::zh-CN
+## 项目结构
```
OpenList-Worker/
@@ -214,26 +93,11 @@ OpenList-Worker/
└── package.json
```
-:::
-
-## Supported Platforms { lang="en" }
-
-## 支持平台 { lang="zh-CN" }
-
-:::en
-| Platform | Entry | Persistence | Notes |
-| :------- | :---- | :---------- | :---- |
-| Cloudflare Workers | `worker.ts` | D1 / KV / DO | One-click deploy supported |
-| Tencent Cloud EdgeOne | `worker.ts` | Blob / KV | One-click deploy supported |
-| Alibaba Cloud ESA | `esa-entry.ts` | EdgeKV | Manual build & deploy |
-| Node.js container | `worker.ts` (with adapter) | MySQL | Self-hosted |
-:::
-
-:::zh-CN
-| 平台 | 入口 | 持久化 | 备注 |
-| :--- | :--- | :----- | :--- |
-| Cloudflare Workers | `worker.ts` | D1 / KV / DO | 支持一键部署 |
-| 腾讯云 EdgeOne | `worker.ts` | Blob / KV | 支持一键部署 |
-| 阿里云 ESA | `esa-entry.ts` | EdgeKV | 手动构建部署 |
-| Node.js 容器 | `worker.ts`(带适配层) | MySQL | 自托管 |
-:::
+## 支持平台
+
+| 平台 | 入口 | 持久化 | 备注 |
+| :----------------- | :---------------------- | :----------- | :----------- |
+| Cloudflare Workers | `worker.ts` | D1 / KV / DO | 支持一键部署 |
+| 腾讯云 EdgeOne | `worker.ts` | Blob / KV | 支持一键部署 |
+| 阿里云 ESA | `esa-entry.ts` | EdgeKV | 手动构建部署 |
+| Node.js 容器 | `worker.ts`(带适配层) | MySQL | 自托管 |
diff --git a/pages/ecosystem/official_worker/guide.md b/pages/ecosystem/official_worker/guide.md
index 154a09c95..d8db196a4 100644
--- a/pages/ecosystem/official_worker/guide.md
+++ b/pages/ecosystem/official_worker/guide.md
@@ -1,113 +1,38 @@
---
-title:
- en: Deployment
- zh-CN: 部署教程
categories:
- ecosystem
- eco_worker
top: 977
---
-## How to Deploy { lang="en" }
+# 部署教程
-## 部署方法 { lang="zh-CN" }
+## 部署方法
-:::: en
-For a detailed, step-by-step deployment guide (Cloudflare Workers / EdgeOne / ESA), see [OpenList Worker 部署指南](/guide/installation/worker).
-::::
-
-:::: zh-CN
详细的分步部署指南(Cloudflare Workers / EdgeOne / ESA)请参阅 [OpenList Worker 部署指南](/guide/installation/worker)。
-::::
-
-### One-click Deploy { lang="en" }
-### 一键部署 { lang="zh-CN" }
+### 一键部署
| EdgeOne 国际站 | EdgeOne 中国站 | Cloudflare Workers |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| [](https://edgeone.ai/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://console.cloud.tencent.com/edgeone/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://deploy.workers.cloudflare.com/?url=https://github.com/OpenListTeam/OpenList-Worker) |
-:::: en
-
-> **Note**: If Cloudflare reports "unable to fetch repository content", [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) the project first, then deploy via the GitHub repository connection.
-> ::::
-
-:::: zh-CN
-
> **注意**:若 Cloudflare 提示"无法获取存储库内容",请先 [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) 本项目,再通过连接到 GitHub 仓库功能部署。
-> ::::
-:::: en
-For platform-specific step-by-step guides, see:
-
-- [Cloudflare Workers](./guide_cfw)
-- [Tencent Cloud EdgeOne](./guide_eom)
-- [Alibaba Cloud ESA](./guide_esa)
- ::::
-
-:::: zh-CN
各平台的分步部署教程,请参阅:
- [Cloudflare Workers](./guide_cfw)
- [腾讯云 EdgeOne](./guide_eom)
- [阿里云 ESA](./guide_esa)
- ::::
-
-### Initialization { lang="en" }
-### 部署后初始化 { lang="zh-CN" }
+### 部署后初始化
-:::: en
-::: tip
-After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
-:::
-::::
-
-:::: zh-CN
::: tip
部署完成后,首次访问站点会自动进入**安装向导**,在浏览器中设置管理员账号与密码即可完成初始化,无需预先配置 `ADMIN_PASS`。
:::
-::::
-
-### Local Development { lang="en" }
-
-### 本地开发 { lang="zh-CN" }
-
-:::: en
-**Prerequisites**
-
-- Node.js 18+ (pnpm recommended)
-- A Cloudflare account (for deploying to Workers)
-
-**Local development**
-```bash
-# 1. Install dependencies
-pnpm install
-
-# 2. Configure wrangler.toml (fill in JWT_SECRET, KV/D1 bindings)
-
-# 3. Start the dev server (auto fetch the official frontend and run the Worker)
-pnpm run dev:unified
-
-# or run the Worker only (frontend built separately)
-pnpm run dev:worker
-```
-
-**Production deploy**
+### 本地开发
-```bash
-# One-click deploy: ensure KV namespace exists → fetch official frontend → deploy to Cloudflare Workers
-pnpm run deploy
-
-# or deploy the Worker directly (skip KV check and frontend build)
-pnpm run deploy:worker
-```
-
-::::
-
-:::: zh-CN
**前置要求**
- Node.js 18+(推荐使用 pnpm)
@@ -137,5 +62,3 @@ pnpm run deploy
# 或直接部署 Worker(跳过 KV 检查与前端构建)
pnpm run deploy:worker
```
-
-::::
diff --git a/pages/ecosystem/official_worker/guide_cfw.md b/pages/ecosystem/official_worker/guide_cfw.md
index 0f4a9b76d..98687c571 100644
--- a/pages/ecosystem/official_worker/guide_cfw.md
+++ b/pages/ecosystem/official_worker/guide_cfw.md
@@ -1,117 +1,13 @@
---
-title:
- en: Deploy to Cloudflare Workers
- zh-CN: 部署教程 - Cloudflare Workers
categories:
- ecosystem
- eco_worker
top: 967
---
-## Deploy to Cloudflare Workers { lang="en" }
+# 部署教程 - Cloudflare Workers
-## 部署到 Cloudflare Workers { lang="zh-CN" }
-
-:::: en
-
-### Prerequisites
-
-- A [Cloudflare](https://dash.cloudflare.com/) account
-- A [GitHub](https://github.com/) account (for connecting the repository)
-- Node.js 18+ and pnpm (only required for local / Wrangler deploy)
-
-### Deploy methods
-
-You have two options to deploy to Cloudflare Workers:
-
-1. **One-click deploy** — click the **Deploy to Cloudflare Workers** button above.
-2. **Manual create via GitHub** — follow the steps below.
-
-### Step 1: Create an application & connect GitHub
-
-Open the Cloudflare Workers dashboard, click **Create application** in the top-right, and choose **Connect to GitHub**. Cloudflare will prompt you to authorize access to your GitHub account — click **Authorize** and select the account (or organization) that contains your fork.
-
-
-
-### Step 2: Select the repository
-
-Fork this project to your own GitHub account first, then select your forked Worker repository when creating the application.
-
-::: tip
-If you deploy directly using the upstream `OpenListTeam/OpenList-Worker` repository and Cloudflare reports "unable to fetch repository content", fork the project first and select your fork instead.
-:::
-
-
-
-### Step 3: Create the application
-
-Click **Create**. Keep the default build parameters and commands:
-
-- **Framework preset**: None / Workers
-- **Build command**: `pnpm run build`
-- **Deploy command**: `npx wrangler deploy`
-- **Production branch**: `main`
-
-Cloudflare will build the Worker and deploy it to a `*.workers.dev` subdomain.
-
-
-
-### Step 4: Configure environment variables
-
-Enter the Worker project you just created, open **Settings → Variables and secrets** (or **Runtime variables and secrets**), and add the environment variables.
-
-
-
-The required variables (`DB_FORMAT`, `DB_DRIVER`) and their optional combinations are described in the [Environment Variables](#environment-variables) section at the end of this page.
-
-### Step 5: Bind the storage binding
-
-If you selected KV or D1 as the driver, you need to bind the corresponding binding in **Settings → Bindings**:
-
-| Type | Variable name |
-| ---- | ------------- |
-| `d1` | `DB` |
-| `kv` | `KV` |
-| `do` | `DO` |
-
-
-
-::: tip Automatic D1 provisioning
-For D1, you can enable Cloudflare's **Automatic resource provisioning**: omit `database_id` in the D1 binding, and Wrangler (>= 4.45.0) auto-creates a D1 database with the same name and writes back the ID on deploy.
-:::
-
-### Step 6: Bind a custom domain
-
-Add your own domain in **Settings → Domains and Routes**, then create a CNAME record for the subdomain pointing to your `*.workers.dev` domain.
-
-
-
-### After deployment
-
-::: tip
-After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
-:::
-
-### Local / Wrangler deploy (alternative)
-
-If you prefer deploying via the command line:
-
-```bash
-# 1. Clone and install dependencies
-git clone https://github.com/OpenListTeam/OpenList-Worker.git
-cd OpenList-Worker
-pnpm install
-
-# 2. Configure wrangler.toml (JWT_SECRET, KV / D1 bindings)
-
-# 3. Deploy to Cloudflare Workers
-pnpm run deploy
-# or: pnpm run deploy:worker (skip frontend build)
-```
-
-::::
-
-:::: zh-CN
+## 部署到 Cloudflare Workers
### 前置要求
@@ -208,12 +104,4 @@ pnpm run deploy
# 或:pnpm run deploy:worker(跳过前端构建)
```
-::::
-
-::: en
-For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
-:::
-
-::: zh-CN
完整的环境变量说明与推荐配置组合,请参阅 [配置变量](./guide_env)。
-:::
diff --git a/pages/ecosystem/official_worker/guide_env.md b/pages/ecosystem/official_worker/guide_env.md
index 7e325379d..8371009b8 100644
--- a/pages/ecosystem/official_worker/guide_env.md
+++ b/pages/ecosystem/official_worker/guide_env.md
@@ -1,107 +1,13 @@
---
-title:
- en: Environment Variables
- zh-CN: 环境变量
categories:
- ecosystem
- eco_worker
top: 972
---
-## Environment Variables { lang="en" }
+# 环境变量
-## 配置变量 { lang="zh-CN" }
-
-:::en
-
-### Required variables
-
-The following parameters are required:
-
-| Parameter | Optional values | Description |
-| ----------- | ----------------------------------------------------------------- | ----------------------- |
-| `DB_FORMAT` | `map` (default) / `key` / `sql` | Data persistence format |
-| `DB_DRIVER` | `auto` (default) / `blob` / `cfkv` / `kv` / `d1` / `do` / `mysql` | Storage location |
-
-#### Security variables
-
-In addition to `DB_FORMAT` and `DB_DRIVER`, it is strongly recommended to configure the following security-related variables:
-
-| Variable | Required | Description |
-| ------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------- |
-| `JWT_SECRET` | Recommended | JWT signing key (≥16 chars), also used for data encryption and cron task auth. Auto-generated and persisted to KV when unset |
-| `ADMIN_PASS` | Optional | Skip the install wizard and auto-initialize the admin with this password |
-| `ALLOW_URLS` | Optional | Comma-separated CORS allowlist |
-
-#### Other optional variables
-
-| Variable | Default | Description |
-| ------------ | ---------- | ---------------------------------------------------------------- |
-| `MAX_UPLOAD` | `26214400` | Max size (bytes) for a whole upload (`/put`, `/form`) |
-| `MAX_UPPART` | `16777216` | Max size (bytes) per chunk in multipart upload |
-| `ASSET_URLS` | — | Frontend asset CDN base URL, supports the `$version` placeholder |
-| `ALLOW_SEED` | — | Allowlist of hosts permitted as seed-data sources |
-
-### Storage format differences
-
-| `DB_FORMAT` | Description |
-| ----------- | ---------------------------------------------------------------------------------------------------------------------------------- |
-| `map` | All data stored as a single JSON. Reads the whole object on every access — lower performance but best compatibility. |
-| `key` | Each record stored as a Key-Value pair, read on demand — decent compatibility and performance, but no indexing. |
-| `sql` | Data stored as SQL tables, fully identical to the Go backend. Supports indexing and full features, but multiple reads take longer. |
-
-### Storage driver differences
-
-| `DB_DRIVER` | Supported platform | Description |
-| ----------- | ------------------ | -------------------------------------------------------------------------- |
-| `auto` | Universal | Auto-detect, priority: blob → cfkv → kv → d1 → memory |
-| `blob` | EdgeOne / ESA | Persistence provided by EdgeOne or Alibaba ESA Blob, free |
-| `cfkv` | Universal | Cloudflare KV REST API, for remote access on platforms without persistence |
-| `kv` | CF / EO / ESA | KV database, fast and free |
-| `d1` | CF | D1 database, Cloudflare only |
-| `do` | CF | Durable Objects, Cloudflare only |
-| `mysql` | Universal | Connect to your own MySQL database |
-
-### Valid combinations
-
-| `DB_FORMAT` | `DB_DRIVER` | Description |
-| ----------- | ----------- | --------------------------------------------------------------------- |
-| `map` | `auto` | JSON storage, auto-selects blob / kv / d1 based on the platform |
-| `map` | `blob` | JSON storage via EdgeOne / ESA Blob (recommended for those platforms) |
-| `map` | `cfkv` | JSON storage via remote CF KV outside CF Workers |
-| `map` | `kv` | JSON storage via KV on CF Workers (recommended) |
-| `map` | `d1` | JSON storage via D1 on CF Workers (not recommended) |
-| `map` | `do` | JSON storage via DO on CF Workers (not recommended, may incur cost) |
-| `key` | `kv` | Key-Value storage via KV on CF Workers (recommended) |
-| `key` | `d1` | Key-Value storage via D1 on CF Workers (recommended) |
-| `key` | `mysql` | Key-Value storage via MySQL on CF Workers (not recommended) |
-| `sql` | `d1` | SQL-Table storage via D1 on CF Workers (recommended) |
-| `sql` | `mysql` | SQL-Table storage via MySQL |
-
-### Remote database configuration
-
-If you bound `cfkv`, set the following variables:
-
-| Variable | Description |
-| ------------ | ----------------------------------- |
-| `CF_ACCOUNT` | Cloudflare account ID |
-| `CF_KV_UUID` | Cloudflare KV namespace ID |
-| `CF_API_KEY` | Cloudflare API token with KV access |
-
-If you bound MySQL, set the following variables:
-
-| Variable | Description |
-| ------------ | ------------------------------------------------------------------------------------------------ |
-| `MYSQL_URL` | Connection string, e.g. `mysql://user:pass@host:3306/db`. When set, the fields below are ignored |
-| `MYSQL_HOST` | Database host |
-| `MYSQL_PORT` | Database port (`3306`) |
-| `MYSQL_USER` | Database user |
-| `MYSQL_PASS` | Database password |
-| `MYSQL_NAME` | Database name |
-
-:::
-
-:::zh-CN
+## 配置变量
### 必选变量
@@ -187,5 +93,3 @@ If you bound MySQL, set the following variables:
| `MYSQL_USER` | 数据库用户 |
| `MYSQL_PASS` | 数据库密码 |
| `MYSQL_NAME` | 数据库名称 |
-
-:::
diff --git a/pages/ecosystem/official_worker/guide_eom.md b/pages/ecosystem/official_worker/guide_eom.md
index 9c4d39fe5..ce328c37a 100644
--- a/pages/ecosystem/official_worker/guide_eom.md
+++ b/pages/ecosystem/official_worker/guide_eom.md
@@ -1,85 +1,13 @@
---
-title:
- en: Deploy to Tencent EdgeOne
- zh-CN: 部署教程 - Tencent EdgeOne
categories:
- ecosystem
- eco_worker
top: 966
---
-## Deploy to EdgeOne { lang="en" }
+# 部署教程 - Tencent EdgeOne
-## 部署到 EdgeOne { lang="zh-CN" }
-
-:::: en
-
-### Prerequisites
-
-- A [Tencent Cloud EdgeOne](https://console.edgeone.ai/makers) account
-- A GitHub account (for connecting the repository)
-
-### Step 1: Deploy the application
-
-Click the **EdgeOne** deploy button above and choose the international or China site:
-
-- [International console](https://console.edgeone.ai/makers)
-- [China console](https://console.cloud.tencent.com/edgeone/makers)
-
-### Step 2: Set environment variables
-
-Click **New application**, select the forked repository, configure the variables, then click **Start deployment**:
-
-
-
-Required variables (`DB_FORMAT`, `DB_DRIVER`) are described in the [Environment Variables](#environment-variables) section at the end of this page.
-
-::: tip Persistence
-EdgeOne Makers uses `@edgeone/pages-blob` for persistence. The default `auto` driver auto-detects Blob, so no extra configuration is needed. You can also explicitly set:
-
-- `DB_DRIVER = "blob"` with `DB_FORMAT = "map"` (JSON storage)
-- `DB_DRIVER = "kv"` with `DB_FORMAT = "key"` (Key-Value storage)
- :::
-
-### Step 3: Bind KV storage
-
-If you use KV storage in the environment variables, you must bind the `KV` variable to your namespace under **Storage → KV Storage**:
-
-
-
-### Step 4: Configure a custom domain
-
-After deployment, open **Domain management**, add a custom domain, then set up the CNAME record as required and enable SSL:
-
-
-
-### Step 5: Scheduled tasks
-
-EdgeOne supports scheduled refresh via `edgeone.json`. Set `cron_secret` in the payload to your `JWT_SECRET` value and configure the schedule:
-
-```jsonc
-{
- "schedules": [
- {
- "name": "token-refresh",
- "cron": "0 2 * * *",
- "path": "/api/task/refresh",
- "method": "POST",
- "payload": { "cron_secret": "" },
- "timezone": "Asia/Shanghai",
- },
- ],
-}
-```
-
-### After deployment
-
-::: tip
-After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
-:::
-::::
-
-:::: zh-CN
+## 部署到 EdgeOne
### 前置要求
@@ -144,12 +72,5 @@ EdgeOne 通过 `edgeone.json` 支持定时刷新。将 payload 中的 `cron_secr
::: tip
部署完成后,首次访问站点会自动进入**安装向导**,在浏览器中设置管理员账号与密码即可完成初始化,无需预先配置 `ADMIN_PASS`。
:::
-::::
-::: en
-For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
-:::
-
-::: zh-CN
完整的环境变量说明与推荐配置组合,请参阅 [配置变量](./guide_env)。
-:::
diff --git a/pages/ecosystem/official_worker/guide_esa.md b/pages/ecosystem/official_worker/guide_esa.md
index d9a8ad934..ee0704a06 100644
--- a/pages/ecosystem/official_worker/guide_esa.md
+++ b/pages/ecosystem/official_worker/guide_esa.md
@@ -1,52 +1,14 @@
---
-title:
- en: Deploy to Alibaba Cloud ESA
- zh-CN: 部署教程 - Alibaba Cloud ESA
categories:
- ecosystem
- eco_worker
top: 965
---
-## Deploy to Alibaba Cloud ESA { lang="en" }
+# 部署教程 - Alibaba Cloud ESA
-## 部署到阿里云 ESA { lang="zh-CN" }
+## 部署到阿里云 ESA
-:::: en
-OpenList Worker ships a dedicated ESA edge function entry (`esa-entry.ts`), which adapts Alibaba Cloud EdgeKV into the project's KV interface.
-
-### Build & deploy
-
-```bash
-# 1. Install dependencies
-pnpm install
-
-# 2. Build (produces dist/esa-entry.js)
-pnpm run build
-```
-
-`esa.jsonc` defines the edge function entry, install/build commands, and the static assets directory:
-
-```jsonc
-{
- "name": "openlist",
- "entry": "./dist/esa-entry.js",
- "installCommand": "pnpm install --no-frozen-lockfile",
- "buildCommand": "pnpm run build",
- "assets": { "directory": "./dist" },
-}
-```
-
-### KV namespace
-
-Configure the EdgeKV namespace via the `KV_NAMESPACE` environment variable (default `openlist`).
-
-:::tip
-ESA EdgeKV is eventually consistent. The entry implements a module-level TTL cache (60s) to avoid "saved settings revert after refresh" caused by cross-node sync delay.
-:::
-::::
-
-:::: zh-CN
OpenList Worker 内置了专用的 ESA 边缘函数入口(`esa-entry.ts`),将阿里云 EdgeKV 适配为项目的 KV 接口。
### 部署应用
@@ -78,12 +40,5 @@ pnpm run build
:::tip
ESA EdgeKV 是最终一致性的。入口实现了带 TTL(60 秒)的模块级缓存,避免跨节点同步延迟导致的「保存设置后刷新复原」问题。
:::
-::::
-:::en
-For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
-:::
-
-:::zh-CN
完整的环境变量说明与推荐配置组合,请参阅 [配置变量](./guide_env)。
-:::
diff --git a/pages/ecosystem/official_worker/index.md b/pages/ecosystem/official_worker/index.md
index cc71ffed0..46e31cea8 100644
--- a/pages/ecosystem/official_worker/index.md
+++ b/pages/ecosystem/official_worker/index.md
@@ -1,30 +1,16 @@
---
-title:
- en: Intro
- zh-CN: 项目介绍
categories:
- ecosystem
- eco_worker
top: 979
---
-## What is OpenList Worker { lang="en" }
+# 项目介绍
-## OpenList Worker 是什么 { lang="zh-CN" }
+## OpenList Worker 是什么
### [OpenListTeam/OpenList-Worker](https://github.com/OpenListTeam/OpenList-Worker)
-:::en
-[**OpenList Worker**](https://github.com/OpenListTeam/OpenList-Worker) (repo `OpenList-TSWorker`) is the official TypeScript + Serverless port of [OpenList](https://github.com/OpenListTeam/OpenList). The Go backend is rewritten as a TypeScript service running on edge platforms (Cloudflare Workers / EdgeOne Cloud Function / Alibaba Cloud ESA), while the frontend keeps the same interface and interaction as the official OpenList frontend.
-
-- **Backend**: Hono.js, runs on Cloudflare Workers / EdgeOne Functions / Alibaba Cloud ESA
-- **Frontend**: SolidJS + TypeScript, Hope UI, built with Vite
-- **Database**: Cloudflare D1 (SQLite), MySQL / MariaDB
-- **Cache**: Cloudflare KV / EdgeOne Blob / ESA EdgeKV (optional)
-- **License**: AGPL-3.0
- :::
-
-:::zh-CN
[**OpenList Worker**](https://github.com/OpenListTeam/OpenList-Worker)(仓库 `OpenList-TSWorker`)是官方 [OpenList](https://github.com/OpenListTeam/OpenList) 项目的 TypeScript + Serverless 架构移植版。后端由 Go 重写为运行于边缘平台(Cloudflare Workers / EdgeOne 云函数 / 阿里云 ESA)上的 TypeScript 服务,前端保持与官方 OpenList 前端一致的界面与交互。
- **后端**:Hono.js,运行于 Cloudflare Workers / EdgeOne 云函数 / 阿里云 ESA
@@ -32,30 +18,11 @@ top: 979
- **数据库**:Cloudflare D1(SQLite)、MySQL / MariaDB
- **缓存**:Cloudflare KV / EdgeOne Blob / ESA EdgeKV(可选)
- **许可证**:AGPL-3.0
- :::
-
-## Features { lang="en" }
-
-## 功能特性 { lang="zh-CN" }
-
-### Storage Aggregation { lang="en" }
-
-### 存储聚合 { lang="zh-CN" }
-
-:::en
-Built-in **81 storage drivers** to mount various storage backends out of the box:
-- **Domestic drives**: Aliyundrive (Open Platform / share), Quark (Open Platform / UC TV), Baidu (album), 115 (Open Platform / share), 123 (Open Platform / share), Tianyi Cloud, China Mobile Cloud, Xunlei, Tencent Weiyun, Lanzou, PikPak (share), Doubao, Teambition, WPS, Alidoc, etc.
-- **International drives**: Google Drive (album), OneDrive, Dropbox, MEGA, MediaFire, Proton Drive, Yandex Disk, TeraBox, etc.
-- **Object storage**: S3-compatible (AWS/OSS/COS/MinIO), UPYUN USS, Azure Blob, WebDAV, FTP, SFTP, SMB, IPFS, etc.
-- **Code hosting**: GitHub, GitHub Releases, CNB Releases
-- **Drive programs**: OpenList (share), AList V3, Cloudreve V3/V4, Kodbox, Seafile, Teldrive, Febbox, etc.
-- **Others**: NetEase Cloud Music, Misskey, Emby, Cloudflare image bed, etc.
+## 功能特性
-In addition to the real storages above, virtual/functional drivers such as `Local`, `Alias`, `UrlTree`, `AutoIndex`, `Strm`, `Crypt`, `Virtual`, `Chunk` are provided for local mount, address alias, URL lists, encrypted storage and chunking scenarios.
-:::
+### 存储聚合
-:::zh-CN
内置 **81 个存储驱动**,开箱即用地挂载各类存储后端:
- **国内网盘**:阿里云盘(开放平台/分享)、夸克网盘(开放平台/UC TV 版)、百度网盘(相册)、115 网盘(开放平台/分享)、123 云盘(开放平台/分享)、天翼云盘、中国移动云盘、迅雷云盘、腾讯微云、蓝奏云、PikPak(分享)、豆包网盘、Teambition 网盘、WPS 网盘、阿里文档等
@@ -66,24 +33,8 @@ In addition to the real storages above, virtual/functional drivers such as `Loca
- **其他驱动**:网易云音乐、Misskey、Emby、Cloudflare 图床等
除上述真实存储外,还提供 `Local`、`Alias`、`UrlTree`、`AutoIndex`、`Strm`、`Crypt`、`Virtual`、`Chunk` 等虚拟/功能型驱动,可用于本地挂载、地址别名、URL 列表、加密存储与分片等场景。
-:::
-### Core Capabilities { lang="en" }
-
-### 核心能力 { lang="zh-CN" }
-
-:::en
-
-- **File browsing**: unified directory tree browsing with online preview for images, videos, audio, documents, code, archives, etc.
-- **Upload & download**: cross-storage upload, batch download, streaming transfer and direct-link redirect.
-- **File sharing**: generate share links with expiration, password and permission control; support anonymous access and directory sharing.
-- **Full-text search**: quickly search files in indexed storages.
-- **Offline tasks**: background task queue for batch operations and async processing.
-- **External interfaces**: expose aggregated storage via WebDAV or S3-compatible protocol for mounting into third-party tools.
-- **MCP service**: provide a Model Context Protocol endpoint that can be integrated and called by AI assistants and other clients.
- :::
-
-:::zh-CN
+### 核心能力
- **文件浏览**:统一的目录树浏览,支持图片、视频、音频、文档、代码、压缩包等格式在线预览。
- **上传下载**:跨存储的上传、批量下载、流式传输与直链跳转。
@@ -92,82 +43,31 @@ In addition to the real storages above, virtual/functional drivers such as `Loca
- **离线任务**:后台任务队列,支持批量操作与异步处理。
- **外部接口**:将聚合存储以 WebDAV 或 S3 兼容协议对外暴露,便于挂载到第三方工具。
- **MCP 服务**:提供 Model Context Protocol 端点,可被 AI 助手等客户端集成调用。
- :::
-
-### Permission Management { lang="en" }
-
-### 权限管理 { lang="zh-CN" }
-:::en
-
-- **Access control**: role-based access control (RBAC), supporting user groups, directory-level read/write permissions and quotas.
-- **Authentication**: built-in account/password, TOTP verification, WebAuthn/FIDO login, SSO single sign-on and LDAP directory authentication.
-- **Security hardening**: JWT sessions, CSRF protection, clickjacking protection (X-Frame-Options), Content Security Policy (CSP).
-- **Health checks**: `/health` liveness probe and `/healthz` readiness probe for monitoring and alerting.
- :::
-
-:::zh-CN
+### 权限管理
- **权限管理**:基于角色的访问控制(RBAC),支持用户分组、目录级读写权限与配额。
- **认证方式**:内置账号密码,支持 TOTP 验证、WebAuthn/FIDO 登录、SSO 单点登录与 LDAP 目录认证。
- **安全加固**:JWT 会话、CSRF 防护、点击劫持防护(X-Frame-Options)、内容安全策略(CSP)。
- **健康检查**:提供 `/health` 存活探针与 `/healthz` 就绪探针,可用于监控与告警。
- :::
-
-### Supported Platforms { lang="en" }
-
-### 支持平台 { lang="zh-CN" }
-
-:::en
-
-- **Runtime platforms**: Cloudflare Workers, Tencent Cloud EdgeOne Functions, Alibaba Cloud ESA.
-- **Data storage**: Cloudflare D1 (SQLite) as primary, with external MySQL / MariaDB support.
-- **Persistent cache**: Cloudflare KV / EdgeOne Blob / ESA EdgeKV (optional), used for configuration persistence and caching.
-- **One-click deploy**: one-click deploy buttons + initialization for Cloudflare Workers, EdgeOne and Alibaba Cloud ESA.
- :::
-:::zh-CN
+### 支持平台
- **运行平台**:Cloudflare Workers、腾讯云 EdgeOne 云函数、阿里云 ESA。
- **数据存储**:Cloudflare D1(SQLite)为主,支持外部 MySQL / MariaDB。
- **持久缓存**:Cloudflare KV / EdgeOne Blob / ESA EdgeKV(可选),用于配置持久化与缓存。
- **一键部署**:支持 Cloudflare Workers、EdgeOne、阿里云 ESA 的一键部署按钮 + 初始化。
- :::
-## Documentation { lang="en" }
+## 文档导航
-## 文档导航 { lang="zh-CN" }
-
-:::en
-
-- [Design Architecture](./architecture) — Tech stack, data storage backend and supported platforms
-- [How to Deploy](./guide) — One-click deploy overview and local development
- - [Cloudflare Workers](./guide_cfw) — Step-by-step Cloudflare Workers deployment (with screenshots)
- - [EdgeOne](./guide_eom) — Tencent Cloud EdgeOne deployment
- - [Alibaba Cloud ESA](./guide_esa) — Alibaba Cloud ESA deployment
-- [Environment Variables](./guide_env) — `DB_FORMAT`, `DB_DRIVER` and all runtime variables
-- [FAQ](./faq) — Common issues and troubleshooting
- :::
-
-:::zh-CN
-
-- [设计架构](./architecture) — 技术栈、数据存储后端与支持平台
+- [设计架构](./basic) — 技术栈、数据存储后端与支持平台
- [部署方法](./guide) — 一键部署入口与本地开发
- [Cloudflare Workers](./guide_cfw) — 分步 Cloudflare Workers 部署教程(含截图)
- [EdgeOne](./guide_eom) — 腾讯云 EdgeOne 部署
- [阿里云 ESA](./guide_esa) — 阿里云 ESA 部署
- [配置变量](./guide_env) — `DB_FORMAT`、`DB_DRIVER` 及所有运行时变量
-- [常见问题](./faq) — 常见问题与排查
- :::
-
-## License { lang="en" }
-
-## 许可证 { lang="zh-CN" }
+- [常见问题](./about) — 常见问题与排查
-:::en
-`OpenList` is open-source software licensed under [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.txt).
-:::
+## 许可证
-:::zh-CN
`OpenList` 是基于 [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.txt) 许可证的开源软件。
-:::
diff --git a/pages/en/api/apidocs.md b/pages/en/api/apidocs.md
new file mode 100644
index 000000000..1a21d63aa
--- /dev/null
+++ b/pages/en/api/apidocs.md
@@ -0,0 +1,14 @@
+---
+top: 10
+categories:
+ - api
+---
+
+# API Documentation
+
+Visit [fox.oplist.org](https://fox.oplist.org) to view and interact with our API documentation online. Live debugging is supported.
+
+All contents, endpoints, and code provided by this API are licensed under the [GNU Affero General Public License v3 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html).
+
+
+
diff --git a/pages/en/api/index.md b/pages/en/api/index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/en/configuration/configuration.md b/pages/en/configuration/configuration.md
new file mode 100644
index 000000000..7119e368a
--- /dev/null
+++ b/pages/en/configuration/configuration.md
@@ -0,0 +1,656 @@
+---
+categories:
+ - configuration
+top: 70
+---
+
+# Configuration
+
+### Initial config
+
+::: tip
+After modifying the configuration file, restart OpenList for changes to take effect
+
+- Windows/macOS: `/data/config.json`
+- Linux: one-click script directory, `/opt/openlist/data/config.json` or `/data/config.json`
+- Docker: `/data/config.json`
+- OpenWrt: modify config on server if using `luci-app-openlist` , otherwise `/data/config.json`
+- Other: `/data/config.json`
+
+:::
+
+```json
+{
+ "force": false,
+ "site_url": "",
+ "cdn": "",
+ "jwt_secret": "random_generated",
+ "token_expires_in": 48,
+ "database": {
+ "type": "sqlite3",
+ "host": "",
+ "port": 0,
+ "user": "",
+ "password": "",
+ "name": "",
+ "db_file": "data\\data.db",
+ "table_prefix": "x_",
+ "ssl_mode": "",
+ "dsn": ""
+ },
+ "meilisearch": {
+ "host": "http://localhost:7700",
+ "api_key": "",
+ "index": "openlist"
+ },
+ "scheme": {
+ "address": "0.0.0.0",
+ "http_port": 5244,
+ "https_port": -1,
+ "force_https": false,
+ "cert_file": "",
+ "key_file": "",
+ "unix_file": "",
+ "unix_file_perm": "",
+ "enable_h2c": false
+ },
+ "temp_dir": "data\\temp",
+ "bleve_dir": "data\\bleve",
+ "dist_dir": "",
+ "log": {
+ "enable": true,
+ "name": "data\\log\\log.log",
+ "max_size": 50,
+ "max_backups": 30,
+ "max_age": 28,
+ "compress": false,
+ "filter": {
+ "enable": false,
+ "filters": [
+ {
+ "cidr": "",
+ "path": "/ping",
+ "method": ""
+ },
+ {
+ "cidr": "",
+ "path": "",
+ "method": "HEAD"
+ },
+ {
+ "cidr": "",
+ "path": "/dav/",
+ "method": "PROPFIND"
+ }
+ ]
+ }
+ },
+ "delayed_start": 0,
+ "max_connections": 0,
+ "max_concurrency": 64,
+ "tls_insecure_skip_verify": true,
+ "tasks": {
+ "download": {
+ "workers": 5,
+ "max_retry": 1,
+ "task_persistant": false
+ },
+ "transfer": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "upload": {
+ "workers": 5,
+ "max_retry": 0,
+ "task_persistant": false
+ },
+ "copy": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "decompress": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "decompress_upload": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "allow_retry_canceled": false
+ },
+ "cors": {
+ "allow_origins": ["*"],
+ "allow_methods": ["*"],
+ "allow_headers": ["*"]
+ },
+ "s3": {
+ "enable": false,
+ "port": 5246,
+ "ssl": false
+ },
+ "ftp": {
+ "enable": false,
+ "listen": ":5221",
+ "find_pasv_port_attempts": 50,
+ "active_transfer_port_non_20": false,
+ "idle_timeout": 900,
+ "connection_timeout": 30,
+ "disable_active_mode": false,
+ "default_transfer_binary": false,
+ "enable_active_conn_ip_check": true,
+ "enable_pasv_conn_ip_check": true
+ },
+ "sftp": {
+ "enable": false,
+ "listen": ":5222"
+ },
+ "mcp": {
+ "enable": false
+ },
+ "last_launched_version": "OpenList version",
+ "proxy_address": ""
+}
+```
+
+## Field Explanation
+
+### force
+
+By default OpenList reads the configuration from environment variables, set this field to `true` to force OpenList to read config from the configuration file.
+
+### site_url
+
+The address of your OpenList server, such as `https://pan.example.com`. This address is essential for some features, and thus thry may not work properly if unset:
+
+- thumbnailing `LocalStorage`
+- previewing site after setting web proxy
+- displaying download address after setting web proxy
+- reverse-proxying to site sub directories
+- ...
+
+Do not include the slash \(`/`\) at the end of the address. For example:
+
+```diff
++ "site_url": "https://openlist.example.com",
+- "site_url": "https://openlist.example.com/",
+```
+
+### cdn
+
+The address of the CDN. Included `$version` values will be dynamically replaced by the version of OpenList. Existing dist resources are hosted on both npm and GitHub, which can be found at:
+
+-
+-
+
+Thus it is possible to use any npm or ~~GitHub~~ CDN path for this field. Do not include the slash `/` at the end of the address. For example:
+
+- `https://registry.npmmirror.com/@openlist-frontend/openlist-frontend/$version/files/dist`
+- `https://unpkg.com/@openlist-frontend/openlist-frontend@$version/dist`
+- `https://cdn.jsdelivr.net/npm/@openlist-frontend/openlist-frontend@$version/dist`
+- `https://fastly.jsdelivr.net/npm/@openlist-frontend/openlist-frontend@$version/dist`
+- `https://gcore.jsdelivr.net/npm/@openlist-frontend/openlist-frontend@$version/dist`
+- `https://jsd.onmicrosoft.cn/npm/@openlist-frontend/openlist-frontend@$version/dist`
+
+- ~~`https://cdn.jsdelivr.net/gh/OpenListTeam/OpenList-Frontend@$version/dist`~~
+- ~~`https://jsd.onmicrosoft.cn/gh/OpenListTeam/OpenList-Frontend@$version/dist`~~
+
+::: tip
+If you are using the lite version, please add `/lite` to the end of the URL. For example: `https://cdn.jsdelivr.net/gh/OpenListTeam/OpenList-Frontend@$version/dist/lite`
+:::
+
+Keep empty to use dist resources embedded in the program by default.
+
+#### CDN for Beta version
+
+Since the frontend uses Vite for building, the generated JS files use a hash naming strategy. When code changes occur, the built file names change, making `index.html` files from different versions incompatible with each other.
+
+The OpenList backend needs to load `index.html` into memory for processing, including inserting code and modifying variables. If deployed only through Pages with modified API addresses, it would result in missing functionality and routing failures.
+
+To solve this problem, we've added the ability to fetch `index.html` from CDN for Beta versions and self-built versions, ensuring that JS files and `index.html` are properly matched.
+
+- **Release version**: Static resources are loaded through NPM CDN with fixed versions, so there's no need to request from CDN - the built-in `index.html` can be used directly
+ - Note: Some NPM CDNs (like npmmirror) may prohibit access to HTML files, but Release versions don't depend on CDN's `index.html`, so they're unaffected
+- **Beta version**: Updates frequently, OpenListTeam doesn't upload to NPM, and no CDN is provided for Beta versions
+
+Since Beta versions don't have NPM CDN provided by OpenListTeam, you need to deploy it yourself:
+
+1. **Deploy frontend build artifacts**
+ - Deploy build artifacts to a CDN platform (you can use Cloudflare Pages, EdgeOne Pages, etc.)
+ - Configure necessary CORS headers, for example of `edgeone.json`:
+
+ ```json
+ {
+ "headers": [
+ {
+ "source": "/*",
+ "headers": [
+ {
+ "key": "Access-Control-Allow-Origin",
+ "value": "*"
+ },
+ {
+ "key": "Access-Control-Allow-Methods",
+ "value": "GET, OPTIONS"
+ },
+ {
+ "key": "Access-Control-Allow-Headers",
+ "value": "Content-Type"
+ }
+ ]
+ },
+ {
+ "source": "/**/*.mjs",
+ "headers": [
+ {
+ "key": "Content-Type",
+ "value": "application/javascript"
+ }
+ ]
+ }
+ ]
+ }
+ ```
+
+ - Recommend using "copy + overwrite" deployment method, retaining old version resource files to ensure compatibility for versions not rebooted
+
+2. **Configure backend**
+ - Add CDN configuration in `config.json`
+ - The program will automatically fetch the latest `index.html` from CDN when starting
+
+3. **Version updates**
+ - When you need to update the frontend, simply restart the backend program
+
+Here's a diagram for better understanding:
+
+```mermaid
+flowchart TD
+ A[Program Initialization] --> B{CDN Configured?}
+
+ B -->|Yes| D{Version Type?}
+ B -->|No| E{Local dist_dir Configured?}
+
+ E -->|No| F[Use Built-in index.html]
+ E -->|Yes| G[Use index.html from Local dist_dir]
+
+ D -->|Beta Version| H[Fetch index.html from CDN]
+ D -->|Release Version| F
+
+ H --> I{CDN Fetch Successful?}
+ I -->|Success| J[Use CDN-fetched index.html]
+ I -->|Failed| K[Resty Retry 3 Times]
+ K -->|Success| J
+ K -->|Still Failed| L[Program Exit, Wait for Restart]
+
+ F --> M[Replace CDN, Site Info and Other Variables]
+ G --> M
+ J --> M
+ M --> N[Return Page]
+```
+
+### jwt_secret
+
+The secret used to sign the JWT token, randomly generated on first run.
+
+### token_expires_in
+
+User login expiration time, in hours.
+
+### database
+
+The database configuration, which is by default `sqlite3`. Available options are `sqlite3`, `mysql` and `postgres`.
+
+- The database options do not need to be modified if using `sqlite3`.
+
+```json
+ "database": {
+ "type": "sqlite3", //database type
+ "host": "", //database host
+ "port": 0, //database port
+ "user": "", //database account
+ "password": "", //database password
+ "name": "", //database name
+ "db_file": "data\\data.db", //Database location, used by sqlite3
+ "table_prefix": "x_", //database table name prefix
+ "ssl_mode": "", //To control the encryption options during the SSL handshake, the parameters can be searched by themselves, or check the answer from ChatGPT below
+ "dsn": "" // https://github.com/alist-org/alist/pull/6031
+ },
+```
+
+::: details Expand to view details of `ssl_mode`
+If you don't know how to fill it in, then your server probably doesn't have SSL enabled, so just leave it blank.
+In MySQL, the `ssl_mode` parameter is used to specify the authentication mode of the SSL connection. Here are a few common options:
+
+- `DISABLED`: Disable SSL connections.
+- `PREFERRED`: Use an SSL connection if server has SSL enabled, and otherwise fallback to a normal connection.
+- `REQUIRED`: Force to use SSL connection and fail if the server does not support SSL connection.
+- `VERIFY_CA`: Force to use SSL connection and verify the authenticity of the server certificate.
+- `VERIFY_IDENTITY`: Force to use an SSL connection and verify the authenticity of the server certificate and that the name matches the connecting hostname.
+ Additional, MySQL 5.x and 8.x have differences. If you are using databases provided by service providers, BTFM. If you deployed the database yourself, STFW.
+ In PostgreSQL, the `ssl_mode` parameter is used to specify how the client uses SSL connections. Here are a few common options:
+- `disable`: Disable SSL connections.
+- `allow`: Allow SSL connections.
+- `prefer`: Use an SSL connection if server has SSL enabled, and otherwise fallback to a normal connection.
+- `require`: Force to use SSL connection and fail if the server does not support SSL connection.
+- `verify-ca`: Force to use SSL connection and verify the authenticity of the server certificate.
+- `verify-full`: Force to use an SSL connection and verify the authenticity of the server certificate and that the name matches the connecting hostname.
+
+:::
+
+::: details Notes on modifying the database when there is already data
+
+1. If you change the `sqlite` database to `mysql` database, it is first recommended to use the backup and recovery method.
+2. If you directly import `sqlite` data into `mysql`, you can view this video tutorial: [View tutorial](https://www.bilibili.com/video/BV1iV4y1T7kh)
+ - Because when directly importing the cloud disk database table, the time of `sqlite` and the time of `mysql` are filled in differently, an error will be reported [please check the precautions and how to solve it](https://www.bilibili.com/video/BV1iV4y1T7kh?t=343.7)
+
+:::
+
+### meilisearch
+
+```json
+ "meilisearch": {
+ "host": "http://localhost:7700", // meilisearch host, the default is the local machine
+ "api_key": "", // if meilisearch's authentication is enabled, this is required
+ "index": "" // meilisearch index uid
+ },
+```
+
+- Documentation link:
+- Reference Links:
+
+### scheme
+
+The configuration of scheme. Set this field if using HTTPS.
+
+- Remember to copy the certificate file to the data directory. Config example:
+
+```json
+ "scheme": {
+ "address": "0.0.0.0", // The http/https address to listen on, default `0.0.0.0`
+ "http_port": 5244, // The http port to listen on, default `5244`, if you want to disable http, set it to `-1`
+ "https_port": -1, // The https port to listen on, default `-1`, if you want to enable https, set it to non `-1`
+ "force_https": false, // Whether the HTTPS protocol is forcibly, if it is set to True, the user can only access the website through HTTPS
+ "cert_file": "data\\cert.crt", // Path of cert file
+ "key_file": "data\\key.key", // Path of key file
+ "unix_file": "", // Unix socket file path to listen on, default empty, if you want to use unix socket, set it to non empty
+ "unix_file_perm": "", // Unix socket file permission, set to the appropriate permissions
+ "enable_h2c": false // Support HTTP/2 Cleartext (H2C) protocol for openlist's http service. The cleartext HTTP/2 protocol supports nginx's grpc_pass after it is enabled - https://github.com/AlistGo/alist/pull/8294
+ },
+```
+
+### temp_dir
+
+The directory to keep temporary files. By default OpenList uses `data/temp`.
+
+::: danger
+temp_dir is a temporary folder exclusive to alist. In order to prevent OpenList from generating garbage files when being interrupted, the directory will be cleared every time OpenList starts, so do not store anything in this directory or map this directory & subdirectories to directories in use when using Docker.
+:::
+
+### bleve_dir
+
+Where data is stored when using **`bleve`** index.
+
+### dist_dir
+
+If this option is set, the front-end files in the defined **local** external folder will be used as a priority.
+
+- Supports using front-end files from an external folder
+- Supports using other front-end files, while the back-end continues to use the original version of the application
+
+Upload the front-end files (dist) to the application's `data` folder, then fill in:
+
+```json
+ "dist_dir": "data/dist",
+```
+
+### log
+
+The log configuration. Set this field to save detailed logs of disable.
+
+```json
+ "log": {
+ "enable": true, // Whether OpenList should store logs
+ "name": "data\\log\\log.log", // The path and name of the log file
+ "max_size": 10, // the maximum size of a single log file, in MB. After reaching the specified size, the file will be automatically split.
+ "max_backups": 5, // the number of log backups to keep. Old backups will be deleted automatically when the limit is exceeded.
+ "max_age": 28, // The maximum number of days preserved in the log file, the log file that exceeds the number of days will be deleted
+ "compress": false, // Whether to enable log file compression functions. After compression, the file size can be reduced, but you need to decompress when viewing, and the default is to close the state false
+ "filter": { // skip some logs output, not enable by default
+ "enable": false,
+ "filters": [ // preset example
+ {
+ "cidr": "",
+ "path": "/ping", // Health check
+ "method": ""
+ },
+ {
+ "cidr": "",
+ "path": "",
+ "method": "HEAD" // HEAD request
+ },
+ { // WebDav metadata
+ "cidr": "",
+ "path": "/dav/",
+ "method": "PROPFIND"
+ }
+ ]
+ },
+```
+
+Each filter acts as the following object:
+
+```json
+{
+ "cidr": "",
+ "path": "", // http path, If it starts with "/", it is an absolute path; if it does not start with "/", it is a relative path
+ "method": "" // HTTP/webdav method, in uppercase
+}
+```
+
+Take note of the startup log to confirm the load, as detailed in the source code `server/middlewares/filtered_logger.go`.
+
+### delayed_start
+
+Whether to delay OpenList startup.
+
+
+
+**Time unit: second**
+
+Generally this option is used when OpenList is configured to auto-start. The reason is that sometimes network takes some time to connect, so drivers requiring cannot start correctly after OpenList starts.
+
+### max_connections
+
+The maximum amount of connections at the same time. The default is 0, which is unlimited.
+
+- 10 or 20 is recommended for general devices such as N1(S905D).
+- Usage Scenarios: the device will crash if the device is bad at concurrency when picture mode is enabled.
+
+### max_concurrency
+
+Limit the maximum concurrency of local agents. The default value is 64, and 0 means no limit.
+
+### tls_insecure_skip_verify
+
+Whether not to verify the SSL certificate.
+
+If there is a problem with the certificate of the website used when this option is not enabled (such as not including the intermediate certificate, having the certificate expired, or forging the certificate, etc.), the service will not be available.
+
+When this option is enabled, please ensure the program is running in a safe network environment.
+
+### tasks
+
+Configuration for background task threads.
+
+```json
+ "tasks": {
+ "download": {
+ "workers": 5,
+ "max_retry": 1,
+ "task_persistant": false
+ },
+ "transfer": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "upload": {
+ "workers": 5,
+ "max_retry": 0,
+ "task_persistant": false
+ },
+ "copy": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "decompress": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "decompress_upload": {
+ "workers": 5,
+ "max_retry": 2,
+ "task_persistant": false
+ },
+ "allow_retry_canceled": false
+ },
+```
+
+- **workers**: Number of task threads.
+- **max_retry**: Number of retries.
+ - 0: Retries disabled.
+- **download**: Download task when downloading offline
+- **transfer**: upload transfer task after offline download is completed
+- **upload**: upload task
+- **copy**: copy the task
+- **decompress**:decompress the task
+- **decompress_upload**:decompress upload the task
+- **task_persistant**:The task is persistent and will not be cancelled after restarting `OpenList`
+ - **download**:false
+ - **transfer**:false
+ - **upload**:false
+ - **copy**:false
+ - **decompress**:false
+ - **decompress_upload**:false
+- **allow_retry_canceled**:Allow users to retry previously canceled tasks
+
+---
+
+A new **transmission** configuration path is added to the background configuration: `/@manage/settings/traffic`
+
+- Supports limiting the number of threads and transmission uplink and downlink rates of **6 tasks**
+- ****
+ Operation principle: If `settings/traffic` does not have a thread number field (first run or just upgraded from an old version), `settings/traffic` will be initialized with the value of the config configuration file. If `settings/traffic` has a value, the thread configuration information of config will be ignored
+- ****
+- Summary: For newly installed or upgraded versions, the values will be read from the configuration file to initialize the `traffic` configuration information. Subsequent modifications to the thread only need to be modified in the background.
+
+### cors
+
+Configuration for Cross-Origin Resource Sharing (CORS).
+
+```json
+ "cors": {
+ "allow_origins": [
+ "*"
+ ],
+ "allow_methods": [
+ "*"
+ ],
+ "allow_headers": [
+ "*"
+ ]
+ }
+```
+
+- **allow_origins**: Allowed sources.
+- **allow_methods**: Allowed request methods.
+- **allow_headers**: Allowed request headers.
+
+Use it to understand it by yourself, and then configure it. If you do n’t know, please do n’t modify it at will. Use the default configuration.
+
+### S3
+
+```json
+ "s3": {
+ "enable": false,
+ "port": 5246,
+ "ssl": false
+ }
+```
+
+- `enable`:Whether the S3 function is enabled, the default is not enabled
+- `port`:port
+- `SSL`:Enable the HTTPS certificate, not enabled by default
+
+Function introduction: [Click to view](../guide/advanced/s3.md)
+
+### ftp
+
+```json
+ "ftp": {
+ "enable": false,
+ "listen": ":5221",
+ "find_pasv_port_attempts": 50,
+ "active_transfer_port_non_20": false,
+ "idle_timeout": 900,
+ "connection_timeout": 30,
+ "disable_active_mode": false,
+ "default_transfer_binary": false,
+ "enable_active_conn_ip_check": true,
+ "enable_pasv_conn_ip_check": true
+ },
+```
+
+- `enable`: Whether the **ftp** function is enabled, not enabled by default
+- `listen`: port number
+- `find_pasv_port_attempts`: maximum number of attempts to re-find a port due to port conflicts during passive transmission
+- `active_transfer_port_non_20`: enable ports other than 20 as active transmission ports
+- `idle_timeout`: maximum idle time (seconds) when there is no client request
+- `connection_timeout`: connection timeout
+- `disable_active_mode`: disable active transmission mode
+- `default_transfer_binary`: transfer in binary mode by default
+- `enable_active_conn_ip_check`: perform IP check on the client side of the TCP connection of the data stream in active transmission mode
+- `enable_pasv_conn_ip_check`: perform IP check on the client side of the TCP connection of the data stream in passive transmission mode
+
+Other instructions: [Click to view](../guide/advanced/ftp.md)
+
+### sftp
+
+```json
+ "sftp": {
+ "enable": false,
+ "listen": ":5222"
+ }
+```
+
+- `enable`: Whether the **sftp** function is enabled, not enabled by default
+- `listen`: port number
+
+Other instructions: [Click to view](../guide/advanced/ftp.md)
+
+### mcp
+
+```json
+ "mcp": {
+ "enable": false
+ }
+```
+
+- `enable`: Whether the **MCP** endpoint is enabled, not enabled by default
+
+Other instructions: [Click to view](../guide/advanced/mcp.md)
+
+### proxy
+
+```json
+ "proxy_address": "",
+```
+
+Supports HTTP proxy, HTTPS proxy, SOCKS4 proxy, SOCKS5 proxy, SOCKS5HOSTNAME proxy.
+
+Both IPv4 and IPv6 are supported.
diff --git a/pages/en/configuration/global.md b/pages/en/configuration/global.md
new file mode 100644
index 000000000..9ad871181
--- /dev/null
+++ b/pages/en/configuration/global.md
@@ -0,0 +1,177 @@
+---
+categories:
+ - configuration
+top: 20
+---
+
+# Global Configuration
+
+## Hide files
+
+Match files hidden by a regular expression (`JavaScript`). Please do not fill it in casually, as incorrect expressions may cause the front-end page to crash.
+
+One regular expression per line.
+
+By default, there is an expression `/\/README.md/i`, which hides `README.md` from all directories.
+
+Note that this is not a true hide. The file will still appear in the API response list, but will not be displayed in the front-end interface. If you wish to truly hide the file, please refer to [metadata](../guide/advanced/meta.md).
+
+## Package download
+
+Whether to enable package download (default is true). **Not recommended, especially for large or numerous files.**
+
+- It is recommended to push files to Aria2 for downloading, as it supports maintaining the directory structure when saving the download folder.
+- For more details, see [What is the difference between the two Aria2](./other.md#other).
+
+## Customize head
+
+The content set here will be automatically inserted into the header of the webpage (not include the manage pages). You can reference scripts, CSS, etc., here to style the frontend of OpenList.
+
+- How to configure PWA(Desktop、Android、IOS):**[alist/issues/6724](https://github.com/alist-org/alist/issues/6724#issuecomment-2220251541)**
+
+## Customize body
+
+The content set here will be automatically inserted at the end of the webpage body. You can add icp information, visit statistics, etc., here.
+
+## Link expiration
+
+The expiration time of the direct link, in hours. If it equals 0, it will not expire. Default is 0.
+
+::: warning
+Only the straight chain of the path with the password added will have an expiration time, otherwise it will not expire.Because the expiration time is added to the sign query parameter, and the path without adding the password will not check the sign.
+:::
+
+## Sign all
+
+Add signatures to the direct link of all files (whether with password or not), such as `https://xxxx.com/d/xx?sign=vUQ5KFXnwMseKnIUXGRcfoG3cEHzKFBiPGp1NriMDXA=:0`.
+
+If you need to close it, you can close it yourself, but you need to pay attention to security issues. After closing the signature, if the site can be accessed by the public network, the password may be bypassed to access private files.
+There are two other methods that also carry the `sign?xxx` parameter:
+
+1. Add Storage Select `Enable Signing`
+2. Meta Information Add Password
+
+The scope of the three methods: `Sign All` > `Meta Information Add Password` > Add Storage Select `Enable Signing`
+
+1. Sign All: If this option is turned on, the sign parameter will be carried regardless of whether meta-information is encrypted or not, and whether `Enable Signing` is checked when adding storage.
+2. Meta Information Add Password:Only files under this meta information path will carry the sign parameter.
+ - If **Apply to sub folder** is turned on, all files in this path will carry the sign parameter
+3. Add Storage Select `Enable Signing`:Only this storage driver carries the sign parameter.
+
+## Privacy regs
+
+What you don't want to show in the error message, One regular expression (in `Golang`) per line. The matched content will be replaced with `*` of the corresponding length.
+
+## Ocr api
+
+Used to identify verification codes. You can deploy yourself: https://hub.docker.com/r/cloudlinksu/openlist-ocr-server.
+
+The default ocr api is deployed on the [Hugging Face](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main). You can clone the Hugging Face repository to build your own: [clone the Hugging Face repository](https://huggingface.co/spaces/Susus21/openlist-ocr/tree/main?duplicate=true).
+
+The hf domain name after successful self-construction is `https://{username}-{repositroy-name}.hf.space/ocr/file/json`.
+
+## Filename char mapping
+
+Map certain special characters, such as `/`, which is used as a path separator in OpenList. When file names contain `/`, it may cause issues like broken file paths or inability to view the files. By using this method, we can map and convert these characters to resolve such problems.
+
+```json
+{ "/": "|", "xx1": "xx1", "xx2": "xx2" }
+```
+
+## Forward direct link params
+
+After enabling, the parameters after `?` will be automatically appended to the end of the direct link URL.
+
+## Ignore direct link params
+
+Ignore the parameters for forwarding direct links, such as `sign` and `openlist_ts`.
+
+## Webauthn login enabled
+
+**Web Authentication (WebAuthn)** is a new authentication method. You can enable it by following these steps:
+
+1. **Enable WebAuthn Feature**: Go to the admin panel, navigate to `Settings` → `Global`, and enable the option `Enable WebAuthn Login`.
+2. **Bind WebAuthn Credentials**: Go to the `Profile` page in the admin panel and click `Add WebAuthn Credential` to bind your credentials.
+
+ Supported authentication methods:
+ - Local PIN code
+ - Companion devices (e.g., smart bands, smartwatches)
+ - Windows Hello options (e.g., facial recognition, fingerprint recognition)
+
+3. **Log in with WebAuthn**: After binding, you can log in using WebAuthn:
+ - On the login page, click the login button on the far right.
+ - Enter your username.
+ - Click login.
+ - Follow the prompts to complete WebAuthn verification (unlock the respective authentication method).
+
+::: tip WebAuthn only supports secure origins.
+
+**Supported environments:**
+
+- Websites with `https://` protocol
+- Localhost environment (`localhost`)
+
+**Unsupported environments:**
+
+- `http://` protocol
+- Local network IPs (e.g., `192.168.x.x`)
+- Local IPs (e.g., `127.0.0.1`)
+- Direct access via server IP
+
+:::
+
+## Allow previewing sharing files
+
+Enable the preview feature for files in share links.
+
+Please note that disabling this option will only hide preview methods (except Download) on the frontend, but cannot prevent users from invoking the relevant APIs.
+
+## Allow previewing sharing archives
+
+Enable the preview feature for archives in share links.
+
+Unlike the previous setting, disabling this option will prevent calls to the archive preview APIs for files in share links.
+
+## Force proxy sharing files
+
+Enforce proxying for all file requests originating from share links.
+
+## Share summary content
+
+The content copied by clicking "Copy Link" after sharing completion, coding in Handlebars template syntax.
+
+If you prefer copying the accessible link directly, try:
+
+- Preview link
+
+```handlebars
+{{base_url}}/@s/{{id}}
+```
+
+- Preview link with share code
+
+```handlebars
+{{base_url}}/@s/{{id}}{{#if pwd}}?pwd={{pwd}}{{/if}}
+```
+
+- direct download link (applies only to single-file shares)
+
+```handlebars
+{{base_url}}/sd/{{id}}{{#if pwd}}?pwd={{pwd}}{{/if}}
+```
+
+## Handle hook after writing
+
+Whether to trigger the directory update hook after operations such as upload, rename, delete, move, copy, or extraction.
+
+Triggering the directory update hook will cause the index to update and activate the function of the [Strm](/en/guide/drivers/strm) driver to generate local files.
+
+## Handle hook rate limit
+
+It is only meaningful when the [Handle hook after writing](/en/configuration/global#handle-hook-after-writing) is enabled. When the directory update hook is triggered, this limits the rate at which the driver API is called (unit: times/second; 0 means no restriction).
+
+## Ignore system files
+
+When enabled, attempts by users to upload certain system files will directly fail, thereby achieving filtering.
+
+The determination of whether a file is a system file is based on its filename.
diff --git a/pages/en/configuration/index.md b/pages/en/configuration/index.md
new file mode 100644
index 000000000..12e064860
--- /dev/null
+++ b/pages/en/configuration/index.md
@@ -0,0 +1,11 @@
+# Configuration
+
+---
+
+- [Configuration file](./configuration)
+- [Site settings](./site)
+- [Style settings](./style)
+- [Preview settings](./preview)
+- [Global settings](./global)
+- [Other settings](./other)
+- [Side settings](./side)
diff --git a/pages/en/configuration/other.md b/pages/en/configuration/other.md
new file mode 100644
index 000000000..966c1fbc3
--- /dev/null
+++ b/pages/en/configuration/other.md
@@ -0,0 +1,53 @@
+---
+categories:
+ - configuration
+top: 10
+---
+
+# Other Configuration
+
+## Aria2
+
+Used for the offline download feature, which downloads an external resource outside of OpenList into the storage managed by OpenList.
+Set Aria2 uri and Aria2 for offline download.
+
+> `Aria2` needs to access the same directory as `OpenList`: `/opt/openlist/data/temp/aria2`. Assuming that both Aria2 and OpenList are independent containers, where OpenList mounts the directory `/etc/openlist/data:/opt/openlist/data`, Aria2 containers need to be additionally mounted under the path `/etc/openlist/data/temp/aria2:/opt/openlist/data/temp/aria2`.
+
+### Aria2 uri
+
+The Aria2 RPC address used for offline downloading. The default value is: `http://localhost:6800/jsonrpc`.
+
+### Aria2 secret
+
+The Aria2 RPC secret key used for offline downloading. The default value is empty.
+
+## qBittorrent
+
+Used to customize **qBittorrent** parameters to configure the client to use.
+
+The default value is: `http://admin:adminadmin@localhost:8080/`, you can modify it by referring to [specific instructions](../guide/advanced/offline-download.md#qbittorrent)
+
+## 115、PikPak、Thunder
+
+**You need to add the driver first, and then set the temporary directory in the settings.**
+
+Allow the use of offline download tools such as 115/PikPak/Thunder in any storage.
+
+- Files will be downloaded directly to the destination dir if using the tool in 115/PikPak/Thunder storage.
+- Otherwise, files will be downloaded to a user-configured temp dir, and then transfered to the destination dir.
+ - For example, on the front-end page of the `GoogleDrive` storage drive, when the `Pikpak offline-download` function is invoked, the file will first be downloaded to the Pikpak temporary folder directory set in the backend. Once the Pikpak offline download is complete, the file will be automatically transferred from Pikpak to `GoogleDrive`.
+
+### Token
+
+The token that can be used to access all APIs of the program. Unlike the token obtained after logging in with a username and password, this token is fixed and has no expiration time.
+
+### Other
+
+1. When using OpenList, you may notice two Aria2 options. What is the difference between them? [**Click here for detailed explanation**](../faq/why.md#what-is-the-difference-between-the-two-aria2)
+
+2. Supports using Aria2 to download folders while preserving the original directory structure.
+ - **Configure Aria2**: Go to the bottom-right corner, click `Settings` → `Aria2 RPC Link` → Enter the `Aria2 RPC Key` (if available).
+ - Aria2 will download files locally, so you only need to initiate the download on your local machine. It also supports pushing the download task to another computer, your own server, or other devices in your local network, as long as the target device has Aria2 installed and is connected to either the public internet or the local network.
+
+ - **Start downloading**: Check the `Enable checkbox` in the bottom-right corner → Select the files/folders → Click `Download` at the bottom → `Send to Aria2`.
+ - **Important notes**: It is recommended not to download too many files at once, such as thousands of folders or tens of thousands of files, as this may cause performance issues.
diff --git a/pages/en/configuration/preview.md b/pages/en/configuration/preview.md
new file mode 100644
index 000000000..90417066e
--- /dev/null
+++ b/pages/en/configuration/preview.md
@@ -0,0 +1,160 @@
+---
+categories:
+ - configuration
+top: 30
+---
+
+# Preview Configuration
+
+## Text types
+
+The extensions of the files you want to preview as text, split by `,`, such as `txt,md,go,tsx`.
+
+## Audio types
+
+The extensions of the files you want to preview as audio, split by `,`, such as `mp3,wav,m4a`.
+
+## Video types
+
+The extensions of the files you want to preview as video, split by `,`, such as `mp4,webm,ogg`.
+
+## Image types
+
+The extensions of the files you want to preview as image, split by `,`, such as `jpg,jpeg,png,gif,webp`.
+
+### Proxy types
+
+The file extensions to be downloaded through the program proxy, split by `,`, such as `m3u8,url`.
+
+### Proxy ignore headers
+
+Do not forward request headers, such as `authorization,referer`, when downloading through the program proxy.
+
+This can prevent download failures caused by header parameter leakage.
+
+### External previews
+
+A json object that contains the external preview settings, It is defined as
+
+```typescript
+interface {
+ [extensions: string]: {
+ [name: string]: string //(url)
+ }
+}
+```
+
+the first key `extensions` is the file extensions separated by `,` (if it starts with `/`, it will be considered a regular expression), and the value is also a `key-value` object, the key is the preview name, and the value is the external url.
+
+For the external URL, we provide some variables for you to use:
+
+Basic variable:
+
+- `$url`: the URL of file, such as `https://openlist.example.com/p/file.pdf`.
+- `$durl`: the direct URL of file, such as `https://oss.example.com/cloud/user/2020/01/01/file.pdf`.
+- `$name`: the file name
+
+Extended variables:
+Add [eb_] before the basic variable, where e means `encodeURIComponent`, b means `base64`, such as:
+
+- `$e_url`: encodeURIComponent($url)
+- `$b_url`: btoa($url)
+- `$eb_url`: encodeURIComponent(btoa($url))
+
+Finally, the `External previews` will displayed a `Open with` menu while current file matched the `extensions`.
+For example, set `External previews` to
+
+```json
+{
+ "txt": {
+ "Notepad": "notepad://$url"
+ },
+ "/.*/": {
+ "VSCode": "vscode://$url"
+ }
+}
+```
+
+when we enter a file with the extension `txt`, it will show:
+
+
+### Iframe previews
+
+Similar to `External previews`, but it will embed an iframe in current page directly.
+
+You need to enter a preview HTML page, and then pass the file address as a parameter to the page using a variable. The available variables are listed in the previous section.
+
+:::tip
+If you want to use self-deployed OnlyOffice to preview office files, you can add the configuration like this here:
+
+```json
+{
+ "doc,docx,xls,xlsx,ppt,pptx": {
+ "OnlyOffice": "you_only_office_url"
+ }
+}
+```
+
+Deploying and using `OnlyOffice` Reference:
+
+- https://github.com/AlistGo/alist/discussions/3255
+- https://github.com/AlistGo/alist/discussions/8271
+
+:::
+
+### Audio cover
+
+The default audio cover.
+
+### Audio autoplay
+
+Whether to automatically play audio files.
+
+### Video autoplay
+
+Whether to automatically play video files.
+
+### Preview archives by default
+
+After enabling this option, compressed files will be previewed by default (as shown in the image below). Although it will consume some server bandwidth, a full download will not occur. If you wish to disable the preview for compressed files, turning off this option will change the default behavior to download mode.
+
+
+
+
+
+### Readme autorender
+
+After closing, the content of files like readme.md will no longer be automatically rendered.
+
+By default, `readme.md`, `footer.md`, and `bottom.md` will be rendered at the bottom of the file, while `header.md`, `top.md`, and `index.md` will be rendered at the top of the file.
+
+### Filter readme scripts
+
+Prevent virus script attacks. After turning it on, the contents of `readme.md` will be displayed in text form.
+
+- Including but not limited to strikethrough, tables, task lists, etc. displayed in text form
+- The specific effects are as follows:
+ 
+
+### Force preview
+
+We can force the preview type through the `type` query parameter.
+
+Available values:
+
+```
+UNKNOWN
+FOLDER
+VIDEO
+AUDIO
+TEXT
+IMAGE
+```
+
+Example: `http://yourdomain/test-file.ahk?type=text`
+
+## Specify preview
+
+We can specify the preview through the `preview` query parameter. The parameter will be generated when you select a preview in the file page.
+
+Example: `http://yourdomain/test-file.ahk?preview=download`
diff --git a/pages/en/configuration/side.md b/pages/en/configuration/side.md
new file mode 100644
index 000000000..1f296c30c
--- /dev/null
+++ b/pages/en/configuration/side.md
@@ -0,0 +1,136 @@
+---
+categories:
+ - configuration
+top: 0
+---
+
+# Side Configuration
+
+We can see a icon on the lower right corner of the homepage. If your computer resolution is very high, the icon is likely to be smaller
+After the expand
+
+-
+ Refresh
+
+ The refresh we mentioned is not to use F5 to refresh the webpage, **but use this icon to refresh**, so that the files that just uploaded to the network disk can be refreshed out.
+
+-
+ New File
+
+-
+ New Folder
+
+-
+ Recursive Move
+
+ Move all the files in the current directory and all files in the subfolder to the designated folder
+ - :warning: Dangerous operation, please use it with caution.
+
+-
+ Remove Empty Folder
+
+-
+ Batch Rename
+
+-
+ Upload
+
+ Open the upload modal.
+
+-
+ Offline download
+
+ Open the offline download modal.
+
+-
+ Toggle Outline
+
+ Toggle the outline for markdown viewer.
+
+-
+ Toggle Checkbox
+
+ Select multiple files.
+ - In the display of Toggle Checkbox, first trigger the selection operation to prevent jumping into a deeper folder
+ - In the display of Toggle Checkbox, change it to hold down the `Alt` key and click to open the folder (macOS Press and hold the `Option` key)
+
+-
+ Local Settings
+
+ Open the local settings.
+
+::: tip
+If you didn't find this feature, please update the version
+:::
+
+## Upload Modal
+
+
+
+Drag files to the field to upload, or click `Choose Folder` or `Choose File` to select files to upload.
+
+There are two methods to upload files:
+
+1. **Stream**: directly puts the binary content of the file into the body, so that the backend can use very little memory, it seem to have no downsides.
+
+2. **Form**: is to wrap the file into formdata and upload it. The memory used by the backend will be more, but there is no limit on the size.
+
+There are the following options:
+
+- **Add as Task**: Create an upload task in the background.
+- **Overwrite existing File**: If the file already exists, it will be overwritten.
+- **Try rapid**: Upload the file with its checksum information, requires cloud storage support.
+
+## Offline Download Modal
+
+
+
+Download the file offline and upload it to the network disk directory you designated.
+
+If you want to keep the offline downloaded file, please add the link first, select the options below, and then start the offline download.
+
+**How to use**: Navigate to the target directory, then select "Offline Download" from the bottom-right corner.
+
+Supported offline download tools: `Aria2`, `qBittorrent`, `SimpleHttp`.
+
+**Note**: When using the offline download feature, OpenList must be installed and running on the corresponding device. Offline downloads cannot be performed across different devices.
+
+For more information, please refer to [Offline Download](../guide/advanced/offline-download.md).
+
+## Local Settings Modal
+
+Local settings will be saved to the browser's local storage.
+
+1. **Aria2 RPC URL** and **Aria2 RPC secret**: This field is for entering the user's Aria2 information, which enables batch downloading on the client side, not on the server side.
+
+2. **Global default layout**: The selection of view selection in the upper right corner is to enter that folder to modify it only for the only folder. This setting can consistently take effect without using a folder setting.
+
+3. **Show folder in image view**: literal meaning
+
+4. **Show sidebar**: Add a list directory on the left side of the list like Windows Explorer, which can jump to a deep folder faster
+
+5. **Show file count message**: At the bottom of the page (in list view) or at the top (in grid or image view), display the total number of items in the current folder and how many items are selected.
+
+6. **Position of header & nav bar**: Is the logo and navigation bar displaying at the drop -down list?
+ - **Normal**: No need to display
+ - **Stick to top of page**: adsorb LOGO and navigation bar
+ - **Only nav bar sticky**: Do not adsorb LOGO, only adsorb navigation bar
+
+7. **Grid item size** : Adjust the picture size in the Grid item mode. Default: 90.
+
+8. **List item filename overflow**: When the text is too long, the three state selection
+ - **Ellipsis**: Default
+ - **Scrollable**: PC users use the `Shift` + `mousewheel` on the file, if it is a mobile phone user sliding the file left and right
+ - **Multi-line**
+
+9. **Open item on Checkbox**:
+ - **Direct**: Open the file/enter the folder
+ - **Double Click**
+ - **Disable while checked**
+ - With `Ctrl` or `Command` (macOS) hold
+ - With `Alt` or `Option` (macOS) hold
+ - If the button option does not take effect, please check whether the browser plugin conflict
+
+ Tips: You can press the `Shift` key to select one, and then select one end. You can quickly select all the files in the middle
+
+10. **Language package selection** and **night mode and daytime mode switch**
diff --git a/pages/en/configuration/site.md b/pages/en/configuration/site.md
new file mode 100644
index 000000000..465765c22
--- /dev/null
+++ b/pages/en/configuration/site.md
@@ -0,0 +1,73 @@
+---
+categories:
+ - configuration
+top: 50
+---
+
+# Site Configuration
+
+## Version
+
+The version of OpenList, readonly.
+
+## Site title
+
+The title of OpenList, such as `OpenList`.
+
+## Announcement
+
+The announcement of OpenList, such as `### Hello\nWelcome to use OpenList`. We suggest you add a title in front of the content, such as `### Hello`, so that the content will not be covered by `Close Button`.
+
+- If you don't want to display it, you can clear the contents of the announcement to not display it.
+- If you think the `x` button in the upper right corner is in the way, you can use the following CSS to remove it
+
+```css
+
+```
+
+## Pagination type
+
+- All: All files will be displayed at once.
+- Pagination: Show a `Paginator` at the bottom of the page.
+- Load more: Show a `Load more` button at the bottom of the page.
+- Auto load more: Automatically load more files when scrolling to the bottom of the page.
+
+## Default page size
+
+The default page size of the `openlist` if `Pagination type` doesn't set to `All`, such as `20`.
+
+## Allow indexing
+
+Whether to allow others to mount your OpenList to build the index, check it and enable it.
+
+The default is off, use with caution. (New features in version 3.8.0)
+
+## Allow mounted
+
+Whether to allow being mounted by other OpenList instances.
+
+**The default is enabled. If you don't want to be mounted by others, it's recommended to disable this option.** (New feature in v3.16.3)
+
+## robots.txt
+
+Crawler configuration/rules.
+
+The default is to allow crawlers to access all pages.
+
+`Allow: /` Indicates that the crawlers of search engines are allowed to visit all pages:
+
+```txt{2}
+User-agent: *
+Allow: /
+```
+
+If you want to prevent crawlers from accessing all pages, you can change it to this:
+
+```txt{2}
+User-agent: *
+Disallow: /
+```
diff --git a/pages/en/configuration/style.md b/pages/en/configuration/style.md
new file mode 100644
index 000000000..412db331e
--- /dev/null
+++ b/pages/en/configuration/style.md
@@ -0,0 +1,39 @@
+---
+categories:
+ - configuration
+top: 40
+---
+
+# Style Configuration
+
+## Logo
+
+The logo is displayed in the upper left corner of the page. The default is the `OpenList logo`.
+
+You can set two different ones at night and during the day, one link per line.
+
+## Favicon
+
+The favicon is displayed in the browser tab. The default is the `OpenList logo`.
+
+## Main color
+
+The main color is used to on the page. The default is `#1890ff`.
+
+## Home icon
+
+The home icon is displayed in the left of the navigation bar. The default is `🏠`.
+
+## Home container
+
+- Max 980px: the main width will set to `min(99%, 980px)`
+- Hope container: sets the max-width of the content to match the min-width of the current breakpoint, refer to https://openlistteam.github.io/hope-ui/docs/layout/container
+
+## Settings layout
+
+The layout of the settings items on the management page.
+
+- Responsive: grids next to each other
+- List style: one grid per row
+
+The default is: List
diff --git a/pages/en/ecosystem/index.md b/pages/en/ecosystem/index.md
new file mode 100644
index 000000000..908565a86
--- /dev/null
+++ b/pages/en/ecosystem/index.md
@@ -0,0 +1,226 @@
+---
+categories:
+ - ecosystem
+top: 1000
+---
+
+# OpenList Ecosystem
+
+This page shows the OpenList ecosystem, including official projects and third-party projects
+
+## Official Projects
+
+### [OpenList Docs ↗](./official_docs)
+
+Documentation based on VitePress, with real-time builds from the GitHub repository.
+
+---
+
+### [OpenList Desktop ↗](./official_desktop)
+
+A cross-platform GUI management interface integrating OpenList and rclone, offering graphical configuration, monitoring, and service management features.
+
+---
+
+### [OpenList Mobile ↗](./official_mobile)
+
+A mobile file server application based on OpenList, built with Flutter framework. Turn your phone into a file server.
+
+---
+
+### [OpenList APIPages ↗](./official_APIpage)
+
+An open-source implementation of the online API functionality in OpenList, deployable on various servers, providing stable and privacy-protected API authentication services for cloud storage users.
+
+---
+
+### [OpenList Proxy ↗](./official_proxy)
+
+OpenList traffic proxy program, which can use another server to proxy OpenList traffic.
+
+---
+
+### [OpenList Worker ↗](./official_worker/)
+
+The official TypeScript + Serverless port of OpenList running on Cloudflare Workers / EdgeOne / Alibaba Cloud ESA, reusing the official React 19 frontend.
+
+---
+
+## Third-Party Open Source Projects
+
+::: tip
+Third-party open source projects are based on community open-source security. The following projects are not affiliated with OpenListTeam. Please evaluate the associated risks before deploying them to a production environment.
+
+If you have a new project that is not listed here, you can submit it through [Issues](https://github.com/OpenListTeam/OpenList-Docs/issues) or [Pull Request](https://github.com/OpenListTeam/OpenList-Docs/pulls).
+:::
+
+### [sbwml/luci-app-openlist ↗](https://github.com/sbwml/luci-app-openlist)
+
+Provides LuCI support for OpenList, suitable for OpenWRT-based router systems.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [giturass/openlist_termux ↗](https://github.com/giturass/openlist_termux/)
+
+OpenList management script for Termux, used for convenient installation, updating, and management of OpenList in the Android Termux environment.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [ypq123456789/openlist-manger ↗](https://github.com/ypq123456789/openlist-manger)
+
+A cross-platform interactive Shell script for managing OpenList, supporting Linux, macOS, Windows (WSL), and Android Termux.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [Alien-Et/OpenList-Magisk ↗](https://github.com/Alien-Et/OpenList-Magisk)
+
+The OpenList Magisk module integrates the OpenList file server into the Android system, running in a systemized manner through Magisk, supporting ARM and ARM64 architectures.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [qianye216/OpenList-Desktop ↗](https://github.com/qianye216/OpenList-Desktop)
+
+OpenList Desktop is a cross-platform desktop client designed for OpenList (Alist) and Rclone. It provides a modern and user-friendly graphical interface that helps you easily manage Alist services and Rclone cloud storage mounts without needing to memorize and input tedious command-line instructions.
+
+Free and Open Source Software licensed under the GPLv3 license.
+
+---
+
+### [LeoHaoVIP/AListLiteAndroid ↗](https://github.com/LeoHaoVIP/AListLiteAndroid)
+
+AListLite is an Android application that supports running OpenList services. Compared to the tutorial described in BV1ex4y157xJ, users can use OpenList services on Android devices (phones/TVs) without needing to install Termux.
+
+Free and Open Source Software licensed under the AGPLv3 license.
+
+---
+
+### [outlook84/mpv-handler-openlist ↗](https://github.com/outlook84/mpv-handler-openlist)
+
+This is a URL protocol handler (mpv://) designed for mpv or mpv.net media players on Windows platform. This tool is used to invoke mpv or mpv.net players from OpenList web pages to open video links.
+
+Free and Open Source Software licensed under the GPLv2 license.
+
+---
+
+### [outlook84/openlist-tvbox-gateway ↗](https://github.com/outlook84/openlist-tvbox-gateway)
+
+OpenList gateway for TVBox, used to connect OpenList resources to TVBox-compatible clients.
+
+Free and Open Source Software licensed under the AGPLv3 license.
+
+---
+
+### [moyanj/AList3SDK ↗](https://github.com/moyanj/AList3SDK)
+
+A high-performance Python SDK for easy interaction with OpenList/AList services. Supports both asynchronous and synchronous APIs, and provides comprehensive type annotations!
+
+Free and Open Source Software licensed under the LGPL-2.1 license.
+
+---
+
+### [huancun/Openlist-EX-container ↗](https://github.com/huancun/Openlist-EX-container)
+
+This project is an improved version based on Alist-EX-container.
+Integrates Openlist, Aria2, qBittorrent, Caddy reverse proxy, supports multi-arch one-click deployment, navigation page and multiple web panels, perfect for offline download and resource management.
+
+Free and Open Source Software licensed under the GPLv3 license.
+
+---
+
+### [hienao/ostrm ↗](https://github.com/hienao/ostrm)
+
+A full-stack application for converting OpenList file lists into STRM streaming media files. (Originally the openlist-strm project)
+
+Free and Open Source Software licensed under the GPLv3 license.
+
+---
+
+### [li-peifeng/iNoi ↗](https://github.com/li-peifeng/iNoi)
+
+An open-source fork of OpenList focusing on stability.
+
+Free and Open Source Software licensed under the AGPLv3 license.
+
+---
+
+### [907739769/OpenList-strm-RuoYi ↗](https://github.com/907739769/OpenList-strm-RuoYi/)
+
+An improved version of OpenList Strm based on RuoYi framework.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [Liki4/qnap-openlist-webdav ↗](https://github.com/Liki4/qnap-openlist-webdav/)
+
+QNAP OpenList | The third-party open-source QPKG version of OpenList.
+
+Free and Open Source Software licensed under the AGPLv3 license.
+
+---
+
+### [HisAtri/openlistapi ↗](https://github.com/HisAtri/openlistapi/)
+
+An open-source Python client implementing the OpenList API.
+
+Free and Open Source Software licensed under the MIT license.
+
+---
+
+### [jiwangyihao/olist-cdn-preheat ↗](https://github.com/jiwangyihao/olist-cdn-preheat/)
+
+OpenList dedicated CDN preheating tool. When used with EdgeOne/ESA origin-following redirection, it efficiently improves cache hit rates and accelerates site downloads.
+
+Free and Open Source Software licensed under the MPLv2 license.
+
+---
+
+### [MY QNAP's OpenList ↗](https://www.myqnap.org/product/openlist/)
+
+QNAP's MyQNAP repository distributes the OpenList application for a fee of $6.
+We have contacted the QNAP France team and, based on the AGPL and CC licenses, requested them to provide the hash values of the application or take it down.
+The communication progress is as follows:
+
+1. The application is provided by QNAP officially, not uploaded by users.
+2. The charging behavior is not for profit, so the CC license does not apply.
+3. According to the AGPL license, if the application has not been modified, hash values like MD5, SHA, etc. must be provided. Currently, QNAP states that the relevant work is in progress.
+4. Based on the above situation, QNAP has temporarily taken down the application and will update the page. Once the hash values are displayed, the download and distribution of OpenList will resume.
+5. As of now, QNAP has not actually violated the license. Our investigation initiated to prevent open-source supply chain risks has been completed.
+
+::: details History information (outdated,archived at 2026-01-22)
+The third-party closed-source QPKG version of OpenList.
+
+[Archived on 2025-7-13](https://web.archive.org/web/20250713005135/https://www.myqnap.org/product/openlist/)
+
+Proprietary software, paid license.
+
+Note: The source code is not open, violating the AGPLv3 license and the OpenList logo's CC BY-NC-SA 4.0 license.
+:::
+
+## Third-Party Proprietary Software
+
+::: danger
+The following lists several other third-party projects derived from OpenList that do not fall into the above categories.
+
+Any actions of these software/projects (including references to OpenList in their names, functionality design, content, or promotional methods) do not represent the stance of the OpenList project. The functionality, consequences of use, and related legal responsibilities are entirely borne by their respective developers or publishers, and the OpenList project assumes no responsibility.
+:::
+
+### [Yxiguan/OpenList_123](https://github.com/Yxiguan/OpenList_123)
+
+::: danger
+The third-party closed-source modified version of OpenList.
+
+[Archived on 2025-10-19](https://web.archive.org/web/20251019150201/https://github.com/Yxiguan/OpenList_123)
+
+Proprietary software, no license.
+
+Note: The source code is not open, violating the AGPLv3 license.
+:::
diff --git a/pages/en/ecosystem/official_APIpage.md b/pages/en/ecosystem/official_APIpage.md
new file mode 100644
index 000000000..b508bde48
--- /dev/null
+++ b/pages/en/ecosystem/official_APIpage.md
@@ -0,0 +1,288 @@
+---
+categories:
+ - ecosystem
+ - eco_official
+top: 970
+---
+
+# OpenList APIPages
+
+## What is OpenList APIPages
+
+### [OpenListTeam/OpenList-APIPages](https://github.com/OpenListTeam/OpenList-APIPages)
+
+[OpenListTeam/OpenList-APIPages](https://github.com/OpenListTeam/OpenList-APIPages) is a utility website led by [@PIKACHUIM](https://github.com/PIKACHUIM) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-APIPages/graphs/contributors). The frontend is primarily used for initial authorization and obtaining refresh tokens of cloud storage clients, while the backend mainly supports a feature called "Online API", which enables remote token refresh functionality while protecting developer client secrets.
+
+## Why OpenList APIPages is needed
+
+Cloud Storage Background:
+
+- Most domestic cloud storage services do not provide official API access to individuals, or the application process is cumbersome, which is not conducive to rapid deployment.
+- According to the cloud storage providers' management requirements, the obtained client keys must not be leaked.
+- User authorization is in the form of refresh tokens, which need to be periodically combined with client keys to obtain refreshed access tokens from the cloud storage servers.
+- API calls require the user's latest access tokens.
+
+Solution:
+
+- Community volunteers provide qualification certification and apply for API access permissions from cloud storage officials.
+- Use relay servers to protect client keys.
+- Periodically send refresh tokens to designated relay servers, which use built-in client keys to refresh access tokens.
+- The relay server sends access tokens back to the OpenList client.
+
+The relay server described above is the backend functionality of the Online API server/APIPages, which works as follows:
+
+```mermaid
+sequenceDiagram
+ participant OpenList
+ participant OnlineAPI as Online API Server
+ participant Server as Cloud Storage Server
+
+ OpenList ->> OnlineAPI: Refresh Token
+ OnlineAPI ->> Server: Cloud Storage Client Key
+ Server -->> OnlineAPI: Access Token
+ OnlineAPI -->> OpenList: Access Token
+ OpenList ->> Server: Access Token
+ OpenList <<->> Server: Cloud Storage Data
+```
+
+The frontend part of APIPages also solves the following problems:
+
+- Initial authorization verification for different cloud storage services.
+- Authorization while protecting built-in client keys.
+- Authorization with custom client keys.
+- Providing callback addresses for custom client keys.
+- Other practical functions for cloud storage mounting.
+
+## How to use OpenList APIPages
+
+
+
+## When OpenList APIPages is not needed
+
+:::tip
+For ordinary users, we strongly recommend using API servers provided by the community to reduce deployment difficulty.
+
+If you encounter failures in the network section, we recommend that you resolve.
+
+:::
+
+If you choose not to use community-provided servers or deploy your own server, please verify the following content:
+
+- 1. Have completely read the documentation related to the corresponding cloud storage driver.
+- 2. Have completely read the open API development documentation provided by the corresponding cloud storage service.
+- 3. Can read and understand the project code, have certain debugging capabilities, and can understand the corresponding logs and error messages.
+- 4. Fully understand the rights granted to you by AGPLv3 and the parts we should be responsible for.
+- 5. Can use basic GitHub functions and know how to **correctly** submit issues/pull requests to us.
+- 6. Please remember that we have no way to solve your network problems.
+
+## APIPages Deployment Tutorial
+
+### One-Click Deployment
+
+- EdgeOne Functions International
+
+
+
+
+
+After deployment, please log in to the [EdgeOne Functions console](https://console.tencentcloud.com/edgeone/pages) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
+
+- EdgeOne Functions China
+
+
+
+
+
+After deployment, please log in to the [EdgeOne Functions console](https://console.cloud.tencent.com/edgeone/pages) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
+
+- Cloudflare Workers Global
+
+
+
+
+
+After deployment, please log in to the [Cloudflare Workers console](https://dash.cloudflare.com/) to modify environment variables. Please refer to the [Variable Description](#variable-description) section.
+
+### Container Deployment
+
+- Pull image
+
+```
+docker pull openlistteam/openlist_api_server
+```
+
+or
+
+```
+docker pull ghcr.io/openlistteam/openlist_api_server:latest
+```
+
+- Start project
+
+```
+docker run -d --name oplist-api-server \
+ -p 3000:3000 \
+ -e OPLIST_MAIN_URLS="api.example.com" \
+ -e OPLIST_PROXY_API="gts.example.com" \
+ -e OPLIST_ONEDRIVE_UID= `#optional` \
+ -e OPLIST_ONEDRIVE_KEY= `#optional` \
+ -e OPLIST_ALICLOUD_UID= `#optional` \
+ -e OPLIST_ALICLOUD_KEY= `#optional` \
+ -e OPLIST_BAIDUYUN_UID= `#optional` \
+ -e OPLIST_BAIDUYUN_KEY= `#optional` \
+ -e OPLIST_BAIDUYUN_EXT= `#optional` \
+ -e OPLIST_CLOUD115_UID= `#optional` \
+ -e OPLIST_CLOUD115_KEY= `#optional` \
+ -e OPLIST_GOOGLEUI_UID= `#optional` \
+ -e OPLIST_GOOGLEUI_KEY= `#optional` \
+ -e OPLIST_YANDEXUI_UID= `#optional` \
+ -e OPLIST_YANDEXUI_KEY= `#optional` \
+ -e OPLIST_DROPBOXS_UID= `#optional` \
+ -e OPLIST_DROPBOXS_KEY= `#optional` \
+ -e OPLIST_QUARKPAN_UID= `#optional` \
+ -e OPLIST_QUARKPAN_KEY= `#optional` \
+ openlistteam/openlist_api_server:latest
+```
+
+- You can replace the image with ghcr:
+
+ ```
+ ghcr.io/openlistteam/openlist_api_server:latest
+ ```
+
+- **Please make sure to modify your environment variables according to the environment variables below**
+
+- Environment Variable Description
+
+| Variable Name | Required | Variable Type | Variable Description |
+| --------------------- | -------- | ------------- | ------------------------------------------------------------- |
+| `OPLIST_MAIN_URLS` | Yes | string | Bind main domain, example: api.example.com |
+| `OPLIST_PROXY_API` | No | string | Nodes deployed in mainland China need to specify Google proxy |
+| `OPLIST_ONEDRIVE_UID` | No | string | OneDrive Client ID |
+| `OPLIST_ONEDRIVE_KEY` | No | string | OneDrive Client Secret |
+| `OPLIST_ALICLOUD_UID` | No | string | AliCloud Drive Developer AppID |
+| `OPLIST_ALICLOUD_KEY` | No | string | AliCloud Drive Developer AppKey |
+| `OPLIST_BAIDUYUN_UID` | No | string | Baidu NetDisk Application UID |
+| `OPLIST_BAIDUYUN_KEY` | No | string | Baidu NetDisk Application Secret AppKey |
+| `OPLIST_BAIDUYUN_EXT` | No | string | Baidu NetDisk Application SecretKey |
+| `OPLIST_CLOUD115_UID` | No | string | 115 NetDisk Application ID |
+| `OPLIST_CLOUD115_KEY` | No | string | 115 NetDisk Application Secret |
+| `OPLIST_GOOGLEUI_UID` | No | string | Google Client ID |
+| `OPLIST_GOOGLEUI_KEY` | No | string | Google Global API Key |
+| `OPLIST_YANDEXUI_UID` | No | string | Yandex Application ID |
+| `OPLIST_YANDEXUI_KEY` | No | string | Yandex Application Secret |
+| `OPLIST_DROPBOXS_UID` | No | string | Dropbox Application ID |
+| `OPLIST_DROPBOXS_KEY` | No | string | Dropbox Application Secret |
+| `OPLIST_QUARKPAN_UID` | No | string | QuarkPan Application ID |
+| `OPLIST_QUARKPAN_KEY` | No | string | QuarkPan Application Secret |
+
+### Edge Deployment
+
+- Clone code
+
+```shell
+git clone https://github.com/OpenListTeam/OpenList-APIPages.git
+```
+
+- Modify configuration (CloudFlare only)
+
+Create and modify `wrangler.jsonc`
+
+```shell
+cp wrangler.example.jsonc wrangler.encrypt.jsonc
+```
+
+Modify variable information:
+
+- MAIN_URLS: Domain name for deployment callback address
+- Other parameters: Application information for each cloud storage service
+
+```
+ "vars": {
+ "MAIN_URLS": "api.example.com",
+ "PROXY_API": "gts.example.com",
+ "onedrive_uid": "*****************************",
+ "onedrive_key": "*****************************",
+ "alicloud_uid": "*****************************",
+ "alicloud_key": "*****************************",
+ "baiduyun_uid": "*****************************",
+ "baiduyun_key": "*****************************",
+ "baiduyun_ext": "*****************************",
+ "cloud115_uid": "*****************************",
+ "cloud115_key": "*****************************",
+ "googleui_uid": "*****************************",
+ "googleui_key": "*****************************",
+ "yandexui_uid": "*****************************",
+ "yandexui_key": "*****************************",
+ "dropboxs_uid": "*****************************",
+ "dropboxs_key": "*****************************",
+ "quarkpan_uid": "*****************************",
+ "quarkpan_key": "*****************************"
+ },
+```
+
+- Test code
+
+```shell
+npm install
+
+# Run in Cloudflare Worker environment
+npm run dev-cf
+
+# Run in Edgeone Functions environment
+npm run dev-eo
+
+# Run in Node Service Work environment
+npm run dev-js
+
+```
+
+- Deploy project
+
+```shell
+# Deploy in Cloudflare Worker environment
+npm run deploy-cf
+
+# Deploy in Edgeone Functions environment
+npm run deploy-eo
+
+# Run locally in Node Service Work
+npm build-js && npm deploy-js
+```
+
+### Variable Description
+
+| Variable Name | Required | Variable Type | Variable Description |
+| -------------- | -------- | ------------- | ------------------------------------------------------------- |
+| `MAIN_URLS` | Yes | string | Bind main domain, example: api.example.com |
+| `PROXY_API` | No | string | Nodes deployed in mainland China need to specify Google proxy |
+| `onedrive_uid` | No | string | OneDrive Client ID |
+| `onedrive_key` | No | string | OneDrive Client Secret |
+| `alicloud_uid` | No | string | AliCloud Drive Developer AppID |
+| `alicloud_key` | No | string | AliCloud Drive Developer AppKey |
+| `baiduyun_uid` | No | string | Baidu NetDisk Application ID |
+| `baiduyun_key` | No | string | Baidu NetDisk Application Secret AppKey |
+| `baiduyun_ext` | No | string | Baidu NetDisk Application SecretKey |
+| `cloud115_uid` | No | string | 115 NetDisk Application ID |
+| `cloud115_key` | No | string | 115 NetDisk Application Secret |
+| `googleui_uid` | No | string | Google Client ID |
+| `googleui_key` | No | string | Google Global API Key |
+| `yandexui_uid` | No | string | Yandex Application ID |
+| `yandexui_key` | No | string | Yandex Application Secret |
+| `dropboxs_uid` | No | string | Dropbox Application ID |
+| `dropboxs_key` | No | string | Dropbox Application Secret |
+| `quarkpan_uid` | No | string | QuarkPan Application ID |
+| `quarkpan_key` | No | string | QuarkPan Application Secret |
+
+## Community APIPages
+
+:::tip
+The following servers are built and provided by community volunteers. Once used, user authorization credentials will inevitably be sent to the servers over the network. This project is licensed under AGPLv3 and only guarantees to provide the source code "as is". Users should verify the deployed content at their own discretion.
+:::
+
+- 国际站点:[api.oplist.org](https://api.oplist.org/)
+- 中国大陆:[api.oplist.org.cn](https://api.oplist.org.cn/)
+
+......
+
+[Welcome to submit more community servers](https://github.com/OpenListTeam/OpenList-Docs/pulls)
diff --git a/pages/en/ecosystem/official_desktop.md b/pages/en/ecosystem/official_desktop.md
new file mode 100644
index 000000000..1ffce1bd3
--- /dev/null
+++ b/pages/en/ecosystem/official_desktop.md
@@ -0,0 +1,194 @@
+---
+categories:
+ - ecosystem
+ - eco_official
+top: 980
+---
+
+# OpenList Desktop
+
+## What is OpenList Desktop
+
+### [OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop)
+
+[OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop) is a powerful cross-platform desktop application led by [@Kuingsmile](https://github.com/Kuingsmile) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-Desktop/graphs/contributors). Built with Vue 3, Tauri, and Rust, it provides a user-friendly interface for managing OpenList services and performing local mounts via Rclone. The application serves as a comprehensive solution for managing OpenList file management services, mounting and managing cloud storage (WebDAV), monitoring service status and uptime, and providing system tray integration for background operations.
+
+## Features
+
+### Core Features
+
+- **OpenList Service Management**: Start, stop, and monitor OpenList core services
+- **Local Mounting**: Mount via Rclone to the local file system
+- **Real-time Monitoring**: Track service status, uptime, and performance metrics
+- **Process Management**: Advanced process control with auto-restart capabilities
+- **System Tray**: Background operation with system tray notifications
+
+### Management Features
+
+- **Service Control**: Start/stop/restart OpenList and Rclone services
+- **Configuration Management**: GUI-based configuration for all services
+- **Log Monitoring**: Real-time log viewing and management
+- **Update Management**: Automatic update checking and installation
+- **Auto-startup**: Configure applications to start with system boot
+
+## Installation
+
+### System Requirements
+
+- **Operating System**: Windows 10+, macOS 10.15+, or Linux (Ubuntu 18.04+)
+
+### Download Options
+
+#### GitHub Releases (Recommended)
+
+Download the latest release from [GitHub Releases](https://github.com/OpenListTeam/OpenList-Desktop/releases):
+
+- **Windows**: `OpenList-Desktop_x.x.x_{arch}-setup.exe`
+- **macOS**: `OpenList-Desktop_x.x.x_{arch}.dmg`
+- **Linux**: `OpenList-Desktop_x.x.x_{arch}.deb` or `OpenList-Desktop_x.x.x_{arch}.rpm`
+
+#### Build from Source
+
+```bash
+# Clone the repository
+git clone https://github.com/OpenListTeam/OpenList-Desktop.git
+cd openlist-desktop
+
+# Install dependencies
+yarn install
+
+# Prepare development environment
+yarn run prebuild:dev
+
+# Build the application
+yarn run build
+yarn run tauri build
+```
+
+### Installation Steps
+
+#### Windows
+
+##### Using Installer
+
+1. Download the `.exe` installer
+2. Run the installer as Administrator
+3. Follow the installation wizard
+4. Launch from Start Menu or Desktop shortcut
+
+##### Using Winget
+
+```bash
+winget install OpenListTeam.OpenListDesktop
+```
+
+#### macOS
+
+1. Download the `.dmg` file
+2. Open the DMG and drag OpenList Desktop to Applications
+3. Right-click and select "Open" (first time only)
+4. Grant necessary permissions when prompted
+
+#### Linux
+
+1. Download the `.deb` or `.rpm` package
+2. Use your package manager to install:
+
+ ```bash
+ sudo dpkg -i OpenList-Desktop_x.x.x_amd64.deb
+ # or
+ sudo rpm -i OpenList-Desktop_x.x.x_amd64.rpm
+ ```
+
+## Usage
+
+### First Launch
+
+It is recommended to run OpenList Desktop with Administrator privileges on first launch to ensure proper service installation and configuration.
+
+1. **Initial Setup**: On first launch, the application will guide you through initial configuration
+2. **Service Installation**: Install the OpenList service when prompted
+3. **Storage Configuration**: Configure your first cloud storage connection
+
+### Basic Operations
+
+#### Starting Services
+
+```bash
+Dashboard → Quick Actions → Start OpenList Core
+Dashboard → Quick Actions → Start Rclone Backend
+```
+
+#### Adding Cloud Storage
+
+1. Navigate to **Mount** tab
+2. Click **Add Remote** button
+3. Configure storage settings:
+ - **Name**: Unique identifier for your storage
+ - **Type**: Storage provider (WebDAV)
+ - **URL**: Storage endpoint URL
+ - **Credentials**: Username and password
+ - **Mount Point**: Local directory path
+4. Click **Save** and **Mount**
+
+#### Monitoring Operations
+
+- **Service Status**: Check the dashboard for service health indicators
+- **Logs**: Use the Logs tab to monitor system operations
+- **Performance**: View uptime and response metrics on the dashboard
+
+## Local Development
+
+### Prerequisites
+
+- **Node.js**: v22+ with yarn
+- **Rust**: Latest nightly version
+- **Git**: Version control
+
+1. **Clone the repository**
+
+ ```bash
+ git clone https://github.com/OpenListTeam/OpenList-Desktop.git
+ cd openlist-desktop
+ ```
+
+2. **Install dependencies**
+
+ ```bash
+ yarn install
+ ```
+
+3. **Prepare development environment**
+
+ ```bash
+ yarn run prebuild:dev
+ ```
+
+4. **Start development server**
+
+ ```bash
+ yarn tauri dev
+ ```
+
+### Building
+
+```bash
+# Build the application
+yarn run build
+yarn run tauri build
+```
+
+## License & Legal
+
+### License
+
+This desktop application project is licensed under the **[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html)**.
+
+- **Freedom to Use**: You can use, modify, and distribute this application
+- **Copyleft**: Any derivative works must also be licensed under GPL-3.0
+- **Source Code**: You must provide source code when distributing the application
+- **Attribution**: You must preserve copyright notices and license information
+
+For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Desktop/blob/main/LICENSE) file.
+
+By contributing to this project, you agree that your contributions will be licensed under the same GPL-3.0 license.
diff --git a/pages/en/ecosystem/official_docs.md b/pages/en/ecosystem/official_docs.md
new file mode 100644
index 000000000..1b939d447
--- /dev/null
+++ b/pages/en/ecosystem/official_docs.md
@@ -0,0 +1,112 @@
+---
+categories:
+ - ecosystem
+ - eco_official
+top: 990
+---
+
+# OpenList Docs
+
+## What is OpenList Docs
+
+### [OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs)
+
+[OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) is the official documentation website for OpenList, led by [@cxw620](https://github.com/cxw620) and collaboratively developed with other [main contributors](https://github.com/OpenListTeam/OpenList-Docs/graphs/contributors). Built with VitePress, it provides comprehensive documentation for OpenList, including installation guides, configuration instructions, API references, and ecosystem information. The documentation supports multiple languages and features real-time builds from the GitHub repository.
+
+## How to use OpenList Docs
+
+You can directly access [doc.oplist.org.cn](https://doc.oplist.org.cn/) to view the documentation.
+
+## Local Development
+
+### Prerequisites
+
+- **Node.js** 24 or later (see `.nvmrc`)
+- **pnpm**: package manager
+- **Git**: for version control and cloning the repository
+
+1. **Clone the repository**
+
+ ```bash
+ git clone https://github.com/OpenListTeam/OpenList-Docs.git
+ cd OpenList-Docs
+ ```
+
+2. **Install dependencies**
+
+ ```bash
+ pnpm install
+ ```
+
+3. **Start development server**
+
+ ```bash
+ pnpm dev
+ ```
+
+4. **Open in browser**
+
+ The documentation site will be available at `http://localhost:5173`
+
+### Building
+
+```bash
+# Build static site into dist/
+pnpm build
+
+# Preview build
+pnpm preview
+```
+
+### Writing Tips
+
+The site is built with [VitePress](https://vitepress.dev/). Everything in its [Markdown guide](https://vitepress.dev/guide/markdown) works here.
+
+1. **One file per language**: Chinese pages live in `pages/`, English pages live in `pages/en/` under the same relative path, for example `pages/guide/drivers/s3.md` and `pages/en/guide/drivers/s3.md`. When you change a page, update both files.
+
+2. **Page title**: The first line of the page content is the title, written as a level-1 heading (`# Title`). Do not add a `title` field to the frontmatter.
+
+3. **Sidebar**: A page appears in the sidebar when its frontmatter has `categories`. Pages are sorted by `top`, from high to low:
+
+ ```md
+ ---
+ top: 895
+ categories:
+ - guide
+ - drivers
+ ---
+
+ # S3
+ ```
+
+4. **Nested containers**: When a container such as `::: tip` contains another container, the outer one needs more colons, otherwise the first `:::` closes the outer container:
+
+ ```md
+ :::: details Example
+ ::: tip
+ Inner tip
+ :::
+ ::::
+ ```
+
+5. **Light and dark images**: Add `#light` / `#dark` to image links to show them only in the matching color mode:
+
+ ```md
+ 
+ 
+ ```
+
+## License & Legal
+
+### License
+
+This documentation project is licensed under the **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)**.
+
+- **Freedom to Use**: You can use, modify, and distribute this documentation
+- **Copyleft**: Any derivative works must also be licensed under AGPL-3.0
+- **Network Use**: If you run a modified version on a server, you must provide the source code
+- **Attribution**: You must preserve copyright notices and license information
+
+For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Docs/blob/main/LICENSE) file.
+
+By contributing to this project, you agree that your contributions will be licensed under the same AGPL-3.0 license.
diff --git a/pages/en/ecosystem/official_mobile.md b/pages/en/ecosystem/official_mobile.md
new file mode 100644
index 000000000..f505501d4
--- /dev/null
+++ b/pages/en/ecosystem/official_mobile.md
@@ -0,0 +1,70 @@
+---
+categories:
+ - ecosystem
+ - eco_official
+top: 975
+---
+
+# OpenList Mobile
+
+## What is OpenList Mobile
+
+### [OpenListTeam/OpenList-Mobile](https://github.com/OpenListTeam/OpenList-Mobile)
+
+[OpenListTeam/OpenList-Mobile](https://github.com/OpenListTeam/OpenList-Mobile) is a mobile file server application based on [OpenList](https://github.com/OpenListTeam/OpenList), built with Flutter framework. It turns your phone into a powerful file server with LAN file sharing, remote access, and online management capabilities. The application is collaboratively developed by the [main contributors](https://github.com/OpenListTeam/OpenList-Mobile/graphs/contributors) and features automatic updates that sync with the latest OpenList releases daily.
+
+## Features
+
+- **Mobile File Server**: Turn your mobile device into a file server
+- **LAN File Sharing**: Share files within local network
+- **Remote Access**: Access your files with internet connection
+- **Online Management**: Web-based file management interface
+- **Auto-Update**: Automatically syncs with latest OpenList releases
+
+## Installation
+
+### System Requirements
+
+- **Storage**: Minimum 100MB free space
+- **Permissions**: Storage access permission required
+
+### Download Options
+
+#### GitHub Releases (Recommended)
+
+Download the latest release from [GitHub Releases](https://github.com/OpenListTeam/OpenList-Mobile/releases):
+
+- **Stable Release**: [Latest Release](https://github.com/OpenListTeam/OpenList-Mobile/releases/latest) - Recommended for production use
+- **Development Build**: [Development Build](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/build.yaml) - Latest features and fixes
+
+#### Auto-Update Feature
+
+**Auto-Update**: [GitHub Actions](https://github.com/OpenListTeam/OpenList-Mobile/actions/workflows/sync_openlist.yaml) automatically checks for the latest [OpenList](https://github.com/OpenListTeam/OpenList/releases) version twice daily (5 AM & 5 PM) and builds releases, ensuring you always have access to the latest version.
+
+### Installation Steps
+
+#### Android
+
+1. Download the `.apk` file from releases
+2. Enable "Install from unknown sources" in Android settings
+3. Install the APK file
+
+#### iOS
+
+iOS support is currently experimental and still in development.
+
+## License & Legal
+
+### License
+
+This mobile application project is licensed under the **[GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.en.html)**.
+
+- **Freedom to Use**: You can use, modify, and distribute this application
+- **Copyleft**: Any derivative works must also be licensed under AGPL-3.0
+- **Network Use**: If you run a modified version on a server, you must provide source code to users
+- **Source Code**: You must provide source code when distributing the application
+- **Attribution**: You must preserve copyright notices and license information
+
+For the full license text, see the [LICENSE](https://github.com/OpenListTeam/OpenList-Mobile/blob/main/LICENSE) file.
+
+By contributing to this project, you agree that your contributions will be licensed under the same AGPL-3.0 license.
diff --git a/pages/en/ecosystem/official_proxy.md b/pages/en/ecosystem/official_proxy.md
new file mode 100644
index 000000000..00511b970
--- /dev/null
+++ b/pages/en/ecosystem/official_proxy.md
@@ -0,0 +1,87 @@
+---
+categories:
+ - ecosystem
+ - eco_official
+top: 960
+---
+
+# OpenList Proxy
+
+## What is OpenList Proxy
+
+[**OpenList Proxy**](https://github.com/OpenListTeam/OpenList-Proxy) is a simple implementation for proxying OpenList's **download traffic**. With this tool, you can isolate the server traffic of the OpenList deployment from the traffic required for downloads, thereby reducing the traffic consumption of the main server or speeding up downloads.
+
+## How to use OpenList Proxy
+
+:::danger
+Cloudflare has explicitly prohibited the use of Workers for proxy operations. Quick deployments implemented on CF-Worker should be used for **experimental** and **temporary testing** purposes only, and not for long-term or high-traffic.
+
+OpenList is not responsible for any consequences resulting from the use
+
+:::
+
+For OpenList Proxy, we provide two deployment methods:
+
+- cf-worker
+- Binary File Deployment
+
+### Cloudflare Worker
+
+:::tip
+In the new version, environment-based configuration has been introduced. Please configure the environment variables as required after deployment.
+
+Do not use "/" at the end of the address.
+
+:::
+
+- Simple Worker Deployment Tutorial On the Cloudflare homepage, select "Workers and Pages",
+ then click "Create" and choose "Start from Hello World!".
+ After deployment, select "Edit Code", go to here, replace the code, and click "Deploy" again.
+
+- (Optional) Configure Domain Go to the Worker configuration page, click "Settings", then click "Add" next to Domains and Routes. Enter the configured subdomain. Use a CNAME record for the corresponding subdomain to point to the workers.dev domain.
+
+- Configure Environment Variables Go to the Worker configuration page,
+ click "Settings", then select "Add" next to Variables and Secrets.
+ Copy the following into the variable names:
+
+ ```env
+ ADDRESS=https://your-openlist-server.com
+ TOKEN=your-api-token-here
+ WORKER_ADDRESS=https://your-worker-address
+ DISABLE_SIGN=false
+ ```
+
+- ADDRESS is the address of your OpenList instance, only ports 443 and 80 are supported.
+ WORKER_ADDRESS is the address of the Worker. If you have bound a custom domain, use the custom domain. This is also the proxy address needed in OpenList.
+ If DISABLE_SIGN is set to true, Proxy will not verify signatures, and anyone who knows the file path and Proxy address can access the file. Please use with caution.
+ It is recommended to set TOKEN as a secret type. In OpenList, go to Settings → Others at the bottom; this token is long-term valid and has full permissions for OpenList.
+
+- CDN Configuration Suggestion: Keep ADDRESS and WORKER_ADDRESS configured as the origin addresses.
+
+### Binary File Deployment
+
+Download the [binary package](https://github.com/OpenListTeam/OpenList-Proxy/releases) and run the command `./openlist-proxy -help` to learn how to use it.
+
+## How OpenList Proxy Works
+
+OpenList Proxy works by proxying the OpenList API to isolate the download traffic of OpenList. Its working principle is as follows:
+
+```mermaid
+sequenceDiagram
+ participant Client as Client
+ participant Proxy as Cloudflare Worker
+ participant OpenList as OpenList Server
+ participant Storage as File Storage
+
+ Client->>Proxy: Download Request (with signature)
+ Proxy->>Proxy: Verify signature and expiration time
+ Proxy->>OpenList: Request file link (/api/fs/link)
+ OpenList-->>Proxy: Return real download address
+ Proxy->>Storage: Request file content
+ Storage-->>Proxy: Return file stream
+ Proxy-->>Client: Forward file content
+```
+
+Proxy verifies the signature and expiration time to ensure the legitimacy of the request. It then requests the file link from the OpenList server to obtain the real download address. After that, Proxy requests the file storage service for the file content and forwards it to the client.
+
+Proxy's signature can be disabled by setting the `DISABLE_SIGN` environment variable or flag. If signature verification is disabled, Proxy will not check the signature and expiration time, allowing anyone who knows the file path and Proxy address to bypass OpenList's own signature verification (which can be configured in the management interface) to access the file. Please use this feature with caution.
diff --git a/pages/en/ecosystem/official_worker/about.md b/pages/en/ecosystem/official_worker/about.md
new file mode 100644
index 000000000..6f46330ae
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/about.md
@@ -0,0 +1,87 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 971
+---
+
+# FAQ
+
+## FAQ
+
+### The install wizard doesn't appear on first visit
+
+Make sure `ADMIN_PASS` is **not** set — when it is set, the worker auto-initializes and skips the wizard. Clear the variable and redeploy, then revisit the site.
+
+---
+
+### Cloudflare reports "unable to fetch repository content"
+
+You are trying to deploy directly from the upstream `OpenListTeam/OpenList-Worker` repository. Cloudflare Workers only allows deploying from repositories you own. [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) the project first, then connect your fork.
+
+---
+
+### Settings are lost after redeployment / page refresh
+
+This usually means no persistent storage is configured. Check:
+
+1. `DB_DRIVER` is set (not `memory`)
+2. The corresponding binding (KV / D1 / Blob) is correctly bound in the platform dashboard
+3. For EdgeOne, the default `auto` driver should auto-detect Blob — if not, explicitly set `DB_DRIVER=blob`
+
+---
+
+### How do I reset the admin password?
+
+If you can still log in, go to **Management → Users** to change the password.
+
+If you are locked out:
+
+1. Set the `ADMIN_PASS` environment variable to a new password and redeploy.
+2. After logging in, remove the variable and redeploy again to re-enable the install wizard on next cold start (or leave it set as a permanent password).
+
+---
+
+### CORS errors when accessing the API from a custom domain
+
+Add `ALLOW_URLS` as an environment variable with a comma-separated list of allowed origins, e.g.:
+
+```
+ALLOW_URLS=https://your-domain.com,https://www.your-domain.com
+```
+
+---
+
+### `DB_FORMAT=sql` tables are not created automatically
+
+D1 tables are created via Drizzle migrations on first startup. Make sure:
+
+1. The D1 binding (`DB`) is correctly configured in `wrangler.toml` or the dashboard.
+2. After binding, trigger a cold start by redeploying.
+
+If using **Automatic resource provisioning**, omit `database_id` from the D1 binding and Wrangler (>= 4.45.0) will create the database automatically on deploy.
+
+---
+
+### How do I migrate data from the Go backend to OpenList Worker?
+
+Use `DB_FORMAT=sql` + `DB_DRIVER=d1` (or `mysql`) with the fixed `x_` table prefix. The TS Worker and the Go backend share the same table schema, so you can:
+
+1. Export the Go backend's SQLite database.
+2. Import it into a Cloudflare D1 database via the Cloudflare dashboard or `wrangler d1 execute`.
+3. Configure the Worker to point to the same D1 database.
+
+---
+
+### ESA EdgeKV settings revert after a few seconds
+
+This is caused by EdgeKV's eventual consistency. The Worker implements a module-level cache with a 60-second TTL to mitigate this. If the issue persists, wait ~60 seconds for the cache to expire and the setting to propagate across nodes.
+
+---
+
+### Build fails with "pnpm: command not found"
+
+The deploy platform is using npm by default. Either:
+
+- Set the **install command** to `npm install --legacy-peer-deps` and **build command** to `npm run build`, or
+- Enable pnpm in the platform settings (e.g. Cloudflare Workers → Framework preset → set Node version to 18+)
diff --git a/pages/en/ecosystem/official_worker/basic.md b/pages/en/ecosystem/official_worker/basic.md
new file mode 100644
index 000000000..c8452c819
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/basic.md
@@ -0,0 +1,103 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 978
+---
+
+# Architecture
+
+## Design Architecture
+
+OpenList Worker is a Serverless-first rewrite of the OpenList Go backend in TypeScript. The system is divided into three layers: edge runtime, data access, and frontend static assets.
+
+## Tech Stack
+
+### Backend
+
+| Component | Technology | Description |
+| :------------- | :------------------------------------------- | :----------------------------------------- |
+| HTTP framework | [Hono.js](https://hono.dev/) | Lightweight, edge-native web framework |
+| Runtime | Cloudflare Workers / EdgeOne Functions / ESA | Edge compute platforms |
+| Language | TypeScript | Fully typed, compiled via esbuild / Vite |
+| ORM | Drizzle ORM | Type-safe SQL query builder for D1 / MySQL |
+| Build tool | esbuild / Vite | Single-file Worker bundle |
+
+### Frontend
+
+| Component | Technology | Description |
+| :----------- | :----------------------- | :------------------------------------- |
+| Framework | SolidJS + TypeScript | Reactive SPA frontend |
+| UI library | Hope UI (@hope-ui/solid) | Component library |
+| Build tool | Vite | Fast frontend build |
+| Bundled with | Workers Static Assets | Served from the same origin as the API |
+
+## Data Storage
+
+### Storage Format (`DB_FORMAT`)
+
+The `DB_FORMAT` variable controls how data is serialized:
+
+| Value | Description | Best for |
+| :-------------- | :---------------------------------------------------- | :------------------------------------- |
+| `map` (default) | Whole object serialized as a single JSON value | KV / Blob storage |
+| `key` | Per-key storage, one record per entity | KV with high read frequency |
+| `sql` | Relational tables, identical schema to the Go backend | D1 / MySQL — enables Go ↔ TS migration |
+
+### Storage Driver (`DB_DRIVER`)
+
+The `DB_DRIVER` variable selects the physical storage backend:
+
+| Value | Platform | Description |
+| :--------------- | :----------------- | :------------------------------------------ |
+| `auto` (default) | Universal | Auto-detect: blob → cfkv → kv → d1 → memory |
+| `blob` | EdgeOne / ESA | EdgeOne Blob or Alibaba ESA Blob |
+| `cfkv` | Universal | Cloudflare KV via REST API (cross-platform) |
+| `kv` | Cloudflare Workers | Cloudflare KV binding |
+| `d1` | Cloudflare Workers | Cloudflare D1 (SQLite) |
+| `do` | Cloudflare Workers | Durable Objects (strong consistency) |
+| `mysql` | Node.js container | External MySQL / MariaDB |
+
+### SQL Table Alignment with Go Backend
+
+When `DB_FORMAT = "sql"`, the TS Worker uses the same table names and schema as the Go backend (GORM, default prefix `x_`), so the two backends can share the same physical database:
+
+| Go struct | Table name |
+| :------------ | :---------------- |
+| `SettingItem` | `x_setting_items` |
+| `SharingDB` | `x_sharing_dbs` |
+| `Storage` | `x_storages` |
+| `User` | `x_users` |
+| `Meta` | `x_metas` |
+| (TS only) | `x_plugins` |
+
+The prefix is fixed to `x_`, matching the Go backend default.
+
+## Project Structure
+
+```
+OpenList-Worker/
+├── src/
+│ ├── backend/ # Hono.js Worker entry & backend logic
+│ │ ├── worker.ts # Cloudflare Workers entry
+│ │ ├── drivers/ # Storage driver implementations (kv / d1 / blob / mysql …)
+│ │ ├── server/ # Route registrations & middleware
+│ │ ├── pkg/ # Shared utilities & helpers
+│ │ └── internal/ # Core business logic (auth, storage, meta, …)
+│ └── frontend/ # Built-in frontend (SolidJS + Vite)
+├── dist/ # Build output (Worker bundle + frontend assets)
+├── esa-entry.ts # Alibaba Cloud ESA entry
+├── wrangler.toml # Cloudflare Workers configuration
+├── esa.jsonc # Alibaba Cloud ESA configuration
+├── edgeone.json # EdgeOne schedules configuration
+└── package.json
+```
+
+## Supported Platforms
+
+| Platform | Entry | Persistence | Notes |
+| :-------------------- | :------------------------- | :----------- | :------------------------- |
+| Cloudflare Workers | `worker.ts` | D1 / KV / DO | One-click deploy supported |
+| Tencent Cloud EdgeOne | `worker.ts` | Blob / KV | One-click deploy supported |
+| Alibaba Cloud ESA | `esa-entry.ts` | EdgeKV | Manual build & deploy |
+| Node.js container | `worker.ts` (with adapter) | MySQL | Self-hosted |
diff --git a/pages/en/ecosystem/official_worker/guide.md b/pages/en/ecosystem/official_worker/guide.md
new file mode 100644
index 000000000..c8c0e7e86
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/guide.md
@@ -0,0 +1,64 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 977
+---
+
+# Deployment
+
+## How to Deploy
+
+For a detailed, step-by-step deployment guide (Cloudflare Workers / EdgeOne / ESA), see [OpenList Worker 部署指南](/en/guide/installation/worker).
+
+### One-click Deploy
+
+| EdgeOne 国际站 | EdgeOne 中国站 | Cloudflare Workers |
+| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| [](https://edgeone.ai/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://console.cloud.tencent.com/edgeone/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://deploy.workers.cloudflare.com/?url=https://github.com/OpenListTeam/OpenList-Worker) |
+
+> **Note**: If Cloudflare reports "unable to fetch repository content", [Fork](https://github.com/OpenListTeam/OpenList-Worker/fork) the project first, then deploy via the GitHub repository connection.
+
+For platform-specific step-by-step guides, see:
+
+- [Cloudflare Workers](./guide_cfw)
+- [Tencent Cloud EdgeOne](./guide_eom)
+- [Alibaba Cloud ESA](./guide_esa)
+
+### Initialization
+
+::: tip
+After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
+:::
+
+### Local Development
+
+**Prerequisites**
+
+- Node.js 18+ (pnpm recommended)
+- A Cloudflare account (for deploying to Workers)
+
+**Local development**
+
+```bash
+# 1. Install dependencies
+pnpm install
+
+# 2. Configure wrangler.toml (fill in JWT_SECRET, KV/D1 bindings)
+
+# 3. Start the dev server (auto fetch the official frontend and run the Worker)
+pnpm run dev:unified
+
+# or run the Worker only (frontend built separately)
+pnpm run dev:worker
+```
+
+**Production deploy**
+
+```bash
+# One-click deploy: ensure KV namespace exists → fetch official frontend → deploy to Cloudflare Workers
+pnpm run deploy
+
+# or deploy the Worker directly (skip KV check and frontend build)
+pnpm run deploy:worker
+```
diff --git a/pages/en/ecosystem/official_worker/guide_cfw.md b/pages/en/ecosystem/official_worker/guide_cfw.md
new file mode 100644
index 000000000..b31f34bae
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/guide_cfw.md
@@ -0,0 +1,107 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 967
+---
+
+# Deploy to Cloudflare Workers
+
+## Deploy to Cloudflare Workers
+
+### Prerequisites
+
+- A [Cloudflare](https://dash.cloudflare.com/) account
+- A [GitHub](https://github.com/) account (for connecting the repository)
+- Node.js 18+ and pnpm (only required for local / Wrangler deploy)
+
+### Deploy methods
+
+You have two options to deploy to Cloudflare Workers:
+
+1. **One-click deploy** — click the **Deploy to Cloudflare Workers** button above.
+2. **Manual create via GitHub** — follow the steps below.
+
+### Step 1: Create an application & connect GitHub
+
+Open the Cloudflare Workers dashboard, click **Create application** in the top-right, and choose **Connect to GitHub**. Cloudflare will prompt you to authorize access to your GitHub account — click **Authorize** and select the account (or organization) that contains your fork.
+
+
+
+### Step 2: Select the repository
+
+Fork this project to your own GitHub account first, then select your forked Worker repository when creating the application.
+
+::: tip
+If you deploy directly using the upstream `OpenListTeam/OpenList-Worker` repository and Cloudflare reports "unable to fetch repository content", fork the project first and select your fork instead.
+:::
+
+
+
+### Step 3: Create the application
+
+Click **Create**. Keep the default build parameters and commands:
+
+- **Framework preset**: None / Workers
+- **Build command**: `pnpm run build`
+- **Deploy command**: `npx wrangler deploy`
+- **Production branch**: `main`
+
+Cloudflare will build the Worker and deploy it to a `*.workers.dev` subdomain.
+
+
+
+### Step 4: Configure environment variables
+
+Enter the Worker project you just created, open **Settings → Variables and secrets** (or **Runtime variables and secrets**), and add the environment variables.
+
+
+
+The required variables (`DB_FORMAT`, `DB_DRIVER`) and their optional combinations are described in the [Environment Variables](#environment-variables) section at the end of this page.
+
+### Step 5: Bind the storage binding
+
+If you selected KV or D1 as the driver, you need to bind the corresponding binding in **Settings → Bindings**:
+
+| Type | Variable name |
+| ---- | ------------- |
+| `d1` | `DB` |
+| `kv` | `KV` |
+| `do` | `DO` |
+
+
+
+::: tip Automatic D1 provisioning
+For D1, you can enable Cloudflare's **Automatic resource provisioning**: omit `database_id` in the D1 binding, and Wrangler (>= 4.45.0) auto-creates a D1 database with the same name and writes back the ID on deploy.
+:::
+
+### Step 6: Bind a custom domain
+
+Add your own domain in **Settings → Domains and Routes**, then create a CNAME record for the subdomain pointing to your `*.workers.dev` domain.
+
+
+
+### After deployment
+
+::: tip
+After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
+:::
+
+### Local / Wrangler deploy (alternative)
+
+If you prefer deploying via the command line:
+
+```bash
+# 1. Clone and install dependencies
+git clone https://github.com/OpenListTeam/OpenList-Worker.git
+cd OpenList-Worker
+pnpm install
+
+# 2. Configure wrangler.toml (JWT_SECRET, KV / D1 bindings)
+
+# 3. Deploy to Cloudflare Workers
+pnpm run deploy
+# or: pnpm run deploy:worker (skip frontend build)
+```
+
+For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
diff --git a/pages/en/ecosystem/official_worker/guide_env.md b/pages/en/ecosystem/official_worker/guide_env.md
new file mode 100644
index 000000000..ead96b05d
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/guide_env.md
@@ -0,0 +1,95 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 972
+---
+
+# Environment Variables
+
+## Environment Variables
+
+### Required variables
+
+The following parameters are required:
+
+| Parameter | Optional values | Description |
+| ----------- | ----------------------------------------------------------------- | ----------------------- |
+| `DB_FORMAT` | `map` (default) / `key` / `sql` | Data persistence format |
+| `DB_DRIVER` | `auto` (default) / `blob` / `cfkv` / `kv` / `d1` / `do` / `mysql` | Storage location |
+
+#### Security variables
+
+In addition to `DB_FORMAT` and `DB_DRIVER`, it is strongly recommended to configure the following security-related variables:
+
+| Variable | Required | Description |
+| ------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `JWT_SECRET` | Recommended | JWT signing key (≥16 chars), also used for data encryption and cron task auth. Auto-generated and persisted to KV when unset |
+| `ADMIN_PASS` | Optional | Skip the install wizard and auto-initialize the admin with this password |
+| `ALLOW_URLS` | Optional | Comma-separated CORS allowlist |
+
+#### Other optional variables
+
+| Variable | Default | Description |
+| ------------ | ---------- | ---------------------------------------------------------------- |
+| `MAX_UPLOAD` | `26214400` | Max size (bytes) for a whole upload (`/put`, `/form`) |
+| `MAX_UPPART` | `16777216` | Max size (bytes) per chunk in multipart upload |
+| `ASSET_URLS` | — | Frontend asset CDN base URL, supports the `$version` placeholder |
+| `ALLOW_SEED` | — | Allowlist of hosts permitted as seed-data sources |
+
+### Storage format differences
+
+| `DB_FORMAT` | Description |
+| ----------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `map` | All data stored as a single JSON. Reads the whole object on every access — lower performance but best compatibility. |
+| `key` | Each record stored as a Key-Value pair, read on demand — decent compatibility and performance, but no indexing. |
+| `sql` | Data stored as SQL tables, fully identical to the Go backend. Supports indexing and full features, but multiple reads take longer. |
+
+### Storage driver differences
+
+| `DB_DRIVER` | Supported platform | Description |
+| ----------- | ------------------ | -------------------------------------------------------------------------- |
+| `auto` | Universal | Auto-detect, priority: blob → cfkv → kv → d1 → memory |
+| `blob` | EdgeOne / ESA | Persistence provided by EdgeOne or Alibaba ESA Blob, free |
+| `cfkv` | Universal | Cloudflare KV REST API, for remote access on platforms without persistence |
+| `kv` | CF / EO / ESA | KV database, fast and free |
+| `d1` | CF | D1 database, Cloudflare only |
+| `do` | CF | Durable Objects, Cloudflare only |
+| `mysql` | Universal | Connect to your own MySQL database |
+
+### Valid combinations
+
+| `DB_FORMAT` | `DB_DRIVER` | Description |
+| ----------- | ----------- | --------------------------------------------------------------------- |
+| `map` | `auto` | JSON storage, auto-selects blob / kv / d1 based on the platform |
+| `map` | `blob` | JSON storage via EdgeOne / ESA Blob (recommended for those platforms) |
+| `map` | `cfkv` | JSON storage via remote CF KV outside CF Workers |
+| `map` | `kv` | JSON storage via KV on CF Workers (recommended) |
+| `map` | `d1` | JSON storage via D1 on CF Workers (not recommended) |
+| `map` | `do` | JSON storage via DO on CF Workers (not recommended, may incur cost) |
+| `key` | `kv` | Key-Value storage via KV on CF Workers (recommended) |
+| `key` | `d1` | Key-Value storage via D1 on CF Workers (recommended) |
+| `key` | `mysql` | Key-Value storage via MySQL on CF Workers (not recommended) |
+| `sql` | `d1` | SQL-Table storage via D1 on CF Workers (recommended) |
+| `sql` | `mysql` | SQL-Table storage via MySQL |
+
+### Remote database configuration
+
+If you bound `cfkv`, set the following variables:
+
+| Variable | Description |
+| ------------ | ----------------------------------- |
+| `CF_ACCOUNT` | Cloudflare account ID |
+| `CF_KV_UUID` | Cloudflare KV namespace ID |
+| `CF_API_KEY` | Cloudflare API token with KV access |
+
+If you bound MySQL, set the following variables:
+
+| Variable | Description |
+| ------------ | ------------------------------------------------------------------------------------------------ |
+| `MYSQL_URL` | Connection string, e.g. `mysql://user:pass@host:3306/db`. When set, the fields below are ignored |
+| `MYSQL_HOST` | Database host |
+| `MYSQL_PORT` | Database port (`3306`) |
+| `MYSQL_USER` | Database user |
+| `MYSQL_PASS` | Database password |
+| `MYSQL_NAME` | Database name |
diff --git a/pages/en/ecosystem/official_worker/guide_eom.md b/pages/en/ecosystem/official_worker/guide_eom.md
new file mode 100644
index 000000000..ea6d9db73
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/guide_eom.md
@@ -0,0 +1,76 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 966
+---
+
+# Deploy to Tencent EdgeOne
+
+## Deploy to EdgeOne
+
+### Prerequisites
+
+- A [Tencent Cloud EdgeOne](https://console.edgeone.ai/makers) account
+- A GitHub account (for connecting the repository)
+
+### Step 1: Deploy the application
+
+Click the **EdgeOne** deploy button above and choose the international or China site:
+
+- [International console](https://console.edgeone.ai/makers)
+- [China console](https://console.cloud.tencent.com/edgeone/makers)
+
+### Step 2: Set environment variables
+
+Click **New application**, select the forked repository, configure the variables, then click **Start deployment**:
+
+
+
+Required variables (`DB_FORMAT`, `DB_DRIVER`) are described in the [Environment Variables](#environment-variables) section at the end of this page.
+
+::: tip Persistence
+EdgeOne Makers uses `@edgeone/pages-blob` for persistence. The default `auto` driver auto-detects Blob, so no extra configuration is needed. You can also explicitly set:
+
+- `DB_DRIVER = "blob"` with `DB_FORMAT = "map"` (JSON storage)
+- `DB_DRIVER = "kv"` with `DB_FORMAT = "key"` (Key-Value storage)
+ :::
+
+### Step 3: Bind KV storage
+
+If you use KV storage in the environment variables, you must bind the `KV` variable to your namespace under **Storage → KV Storage**:
+
+
+
+### Step 4: Configure a custom domain
+
+After deployment, open **Domain management**, add a custom domain, then set up the CNAME record as required and enable SSL:
+
+
+
+### Step 5: Scheduled tasks
+
+EdgeOne supports scheduled refresh via `edgeone.json`. Set `cron_secret` in the payload to your `JWT_SECRET` value and configure the schedule:
+
+```jsonc
+{
+ "schedules": [
+ {
+ "name": "token-refresh",
+ "cron": "0 2 * * *",
+ "path": "/api/task/refresh",
+ "method": "POST",
+ "payload": { "cron_secret": "" },
+ "timezone": "Asia/Shanghai",
+ },
+ ],
+}
+```
+
+### After deployment
+
+::: tip
+After deployment, the first visit to the site automatically enters an **install wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
+:::
+
+For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
diff --git a/pages/en/ecosystem/official_worker/guide_esa.md b/pages/en/ecosystem/official_worker/guide_esa.md
new file mode 100644
index 000000000..6cc16acb6
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/guide_esa.md
@@ -0,0 +1,44 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 965
+---
+
+# Deploy to Alibaba Cloud ESA
+
+## Deploy to Alibaba Cloud ESA
+
+OpenList Worker ships a dedicated ESA edge function entry (`esa-entry.ts`), which adapts Alibaba Cloud EdgeKV into the project's KV interface.
+
+### Build & deploy
+
+```bash
+# 1. Install dependencies
+pnpm install
+
+# 2. Build (produces dist/esa-entry.js)
+pnpm run build
+```
+
+`esa.jsonc` defines the edge function entry, install/build commands, and the static assets directory:
+
+```jsonc
+{
+ "name": "openlist",
+ "entry": "./dist/esa-entry.js",
+ "installCommand": "pnpm install --no-frozen-lockfile",
+ "buildCommand": "pnpm run build",
+ "assets": { "directory": "./dist" },
+}
+```
+
+### KV namespace
+
+Configure the EdgeKV namespace via the `KV_NAMESPACE` environment variable (default `openlist`).
+
+:::tip
+ESA EdgeKV is eventually consistent. The entry implements a module-level TTL cache (60s) to avoid "saved settings revert after refresh" caused by cross-node sync delay.
+:::
+
+For a full list of environment variables and recommended configurations, see [Environment Variables](./guide_env).
diff --git a/pages/en/ecosystem/official_worker/index.md b/pages/en/ecosystem/official_worker/index.md
new file mode 100644
index 000000000..bcf5e0485
--- /dev/null
+++ b/pages/en/ecosystem/official_worker/index.md
@@ -0,0 +1,73 @@
+---
+categories:
+ - ecosystem
+ - eco_worker
+top: 979
+---
+
+# Intro
+
+## What is OpenList Worker
+
+### [OpenListTeam/OpenList-Worker](https://github.com/OpenListTeam/OpenList-Worker)
+
+[**OpenList Worker**](https://github.com/OpenListTeam/OpenList-Worker) (repo `OpenList-TSWorker`) is the official TypeScript + Serverless port of [OpenList](https://github.com/OpenListTeam/OpenList). The Go backend is rewritten as a TypeScript service running on edge platforms (Cloudflare Workers / EdgeOne Cloud Function / Alibaba Cloud ESA), while the frontend keeps the same interface and interaction as the official OpenList frontend.
+
+- **Backend**: Hono.js, runs on Cloudflare Workers / EdgeOne Functions / Alibaba Cloud ESA
+- **Frontend**: SolidJS + TypeScript, Hope UI, built with Vite
+- **Database**: Cloudflare D1 (SQLite), MySQL / MariaDB
+- **Cache**: Cloudflare KV / EdgeOne Blob / ESA EdgeKV (optional)
+- **License**: AGPL-3.0
+
+## Features
+
+### Storage Aggregation
+
+Built-in **81 storage drivers** to mount various storage backends out of the box:
+
+- **Domestic drives**: Aliyundrive (Open Platform / share), Quark (Open Platform / UC TV), Baidu (album), 115 (Open Platform / share), 123 (Open Platform / share), Tianyi Cloud, China Mobile Cloud, Xunlei, Tencent Weiyun, Lanzou, PikPak (share), Doubao, Teambition, WPS, Alidoc, etc.
+- **International drives**: Google Drive (album), OneDrive, Dropbox, MEGA, MediaFire, Proton Drive, Yandex Disk, TeraBox, etc.
+- **Object storage**: S3-compatible (AWS/OSS/COS/MinIO), UPYUN USS, Azure Blob, WebDAV, FTP, SFTP, SMB, IPFS, etc.
+- **Code hosting**: GitHub, GitHub Releases, CNB Releases
+- **Drive programs**: OpenList (share), AList V3, Cloudreve V3/V4, Kodbox, Seafile, Teldrive, Febbox, etc.
+- **Others**: NetEase Cloud Music, Misskey, Emby, Cloudflare image bed, etc.
+
+In addition to the real storages above, virtual/functional drivers such as `Local`, `Alias`, `UrlTree`, `AutoIndex`, `Strm`, `Crypt`, `Virtual`, `Chunk` are provided for local mount, address alias, URL lists, encrypted storage and chunking scenarios.
+
+### Core Capabilities
+
+- **File browsing**: unified directory tree browsing with online preview for images, videos, audio, documents, code, archives, etc.
+- **Upload & download**: cross-storage upload, batch download, streaming transfer and direct-link redirect.
+- **File sharing**: generate share links with expiration, password and permission control; support anonymous access and directory sharing.
+- **Full-text search**: quickly search files in indexed storages.
+- **Offline tasks**: background task queue for batch operations and async processing.
+- **External interfaces**: expose aggregated storage via WebDAV or S3-compatible protocol for mounting into third-party tools.
+- **MCP service**: provide a Model Context Protocol endpoint that can be integrated and called by AI assistants and other clients.
+
+### Permission Management
+
+- **Access control**: role-based access control (RBAC), supporting user groups, directory-level read/write permissions and quotas.
+- **Authentication**: built-in account/password, TOTP verification, WebAuthn/FIDO login, SSO single sign-on and LDAP directory authentication.
+- **Security hardening**: JWT sessions, CSRF protection, clickjacking protection (X-Frame-Options), Content Security Policy (CSP).
+- **Health checks**: `/health` liveness probe and `/healthz` readiness probe for monitoring and alerting.
+
+### Supported Platforms
+
+- **Runtime platforms**: Cloudflare Workers, Tencent Cloud EdgeOne Functions, Alibaba Cloud ESA.
+- **Data storage**: Cloudflare D1 (SQLite) as primary, with external MySQL / MariaDB support.
+- **Persistent cache**: Cloudflare KV / EdgeOne Blob / ESA EdgeKV (optional), used for configuration persistence and caching.
+- **One-click deploy**: one-click deploy buttons + initialization for Cloudflare Workers, EdgeOne and Alibaba Cloud ESA.
+
+## Documentation
+
+- [Design Architecture](./basic) — Tech stack, data storage backend and supported platforms
+- [How to Deploy](./guide) — One-click deploy overview and local development
+ - [Cloudflare Workers](./guide_cfw) — Step-by-step Cloudflare Workers deployment (with screenshots)
+ - [EdgeOne](./guide_eom) — Tencent Cloud EdgeOne deployment
+ - [Alibaba Cloud ESA](./guide_esa) — Alibaba Cloud ESA deployment
+- [Environment Variables](./guide_env) — `DB_FORMAT`, `DB_DRIVER` and all runtime variables
+- [FAQ](./about) — Common issues and troubleshooting
+
+## License
+
+`OpenList` is open-source software licensed under [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.txt).
diff --git a/pages/en/faq/_example.md b/pages/en/faq/_example.md
new file mode 100644
index 000000000..015122576
--- /dev/null
+++ b/pages/en/faq/_example.md
@@ -0,0 +1,12 @@
+---
+# title:
+# en: FAQ
+# zh-CN: FAQ
+# categories:
+# - faq
+# top: 100
+---
+
+
+
+
diff --git a/pages/en/faq/error.md b/pages/en/faq/error.md
new file mode 100644
index 000000000..fe9b6afc8
--- /dev/null
+++ b/pages/en/faq/error.md
@@ -0,0 +1,166 @@
+---
+top: 1
+categories:
+ - faq
+---
+
+# OpenList Error-Code
+
+This article will collect some error codes that may occur during the use of OpenList and provide corresponding solutions (including network issues, changes in cloud storage APIs, and other cases that may require manual intervention).
+
+---
+
+**Q**:Ali cloud disk open appears **TooManyRequests** 、**Too Many Requests**
+
+**A**:[**Click me to view detailed description**](../guide/drivers/aliyundrive_open.md)
+
+---
+
+**Q**:Ali cloud disk open appears **ExceedCapacityForbidden**
+
+**A**:[**Click me to view detailed description**](../guide/drivers/aliyundrive_open.md#4-other-instructions)
+
+---
+
+**Q**:Token is expired(**Appears when logging in to the OpenList account**)
+
+**A**:It means that your `OpenList` login is valid for `48` hours by default, you can modify the configuration file `config.json`
+
+- If you are prompted to log in successfully when you log in and then this prompt is displayed again, check whether you have used CDN acceleration to cache the OpenList.
+
+---
+
+**Q**:Failed init storage but storage is already created: failed init storage: failed to refresh token: The input parameter refresh_token is missing. Please refer to document.
+
+**A**:Generally, the refresh token (token) is wrong when adding `driver`, and it can be solved by replacing it with the correct one.
+
+---
+
+**Q**:failed get objs: failed to list objs: ForbiddenDriveNotValid:not valid driveld
+
+**A**:Generally, it means that `driver` has been deprecated. For example, Aliyun disk can be replaced with [**Alibaba cloud disk open**](../guide/drivers/aliyundrive_open.md). Others are temporarily unknown.
+
+---
+
+**Q**:no such host、TLS handshake timeout、read: connection reset by peer、dns lookup failed、connect: connection refused、Client.Timeout exceeded while awaiting headers、network is unreachable
+
+**A**:These problems are generally caused by network problems, and you can troubleshoot and solve them yourself.
+
+- If you encounter it when you add `Aliyun disk open`:TLS handshake timeout ([Click me to see how to solve](./why.md#prompt-when-adding-aliyun-drive-shared-prompt-post-https-auth-aliyundrive-com-v2-account-token-net-http-tls-handshake-timeout))
+
+---
+
+**Q**:Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path (**appears when mounting the driver**)
+
+**A**:The path to mount to, it is unique and cannot be repeated
+
+---
+
+**Q**:Key: 'Storage.MountPath' Error:Field validation for 'MountPath' failed on the 'required' tag (**appears when mounting the driver**)
+
+**A**:The mount path is a required option, please fill in it
+
+---
+
+**Q**:UNIQUE constraint failed: x_meta.path (appears when adding meta information)
+
+**A**:When adding meta information, there can only be one path, and it cannot be repeated
+
+---
+
+**Q**:Key: 'Meta.Path' Error:Field validation for 'Path' failed on the 'required' tag (appears when adding meta information)
+
+**A**:When adding metadata, the path must be filled in
+
+---
+
+**Q**:failed get objs: failed to list objs: Sorry, sharing is not available in the current region(**PikPak/share**)
+
+**Q**:failed get objs: failed to list objs: terabox is not yet available in this are(**Terabox**)
+
+**A**:Domestic access is not supported, if you build it locally, you can check this [**Reference Solution**](https://anwen-anyi.github.io/index/07-wenti.html#_41-alist如何-使用-吃到-代理-proxy)
+
+- For example, Google, Mega, Terabox, etc. that require a proxy to access can be used in this way
+
+---
+
+**Q**:Search not available(**appears when indexing**)
+
+**A**:The `Search Index` option is not selected, and cannot be built and used. I don’t know which search index to choose? [**Click me to view**](../guide/advanced/search.md#difference-between-different-search-indexes)
+
+---
+
+**Q**:only chinese and english, numbers and underscores are supported, and the length is no more than 50 (**Appears when the baidu.photo folder is renamed**)
+
+**A**:When renaming the baidu.photo folder, the maximum length is 50
+
+---
+
+**Q**:failed get objs: failed to list objs: NotFound.FileId:The resource file_id cannot be found. file_id:634e704cefa78f92fefd4c779f7422d820082d041(**Add Alibaba cloud disk open**)
+
+**A**:When adding the open storage of Alibaba Cloud disk, `root folder ID` is wrong, which of the last ID above is the wrong ID, just get the correct replacement.
+
+---
+
+**Q**:System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat
+
+**A**:Your Tampermonkey answering plug-in conflicts, just close it [**For details, click to view**](https://github.com/alist-org/alist/discussions/2399)
+
+---
+
+**Q**:Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later.
+
+**A**:If you enter the wrong password for 6 consecutive logins, it will be locked, and you can reset it by restarting OpenList.
+
+---
+
+**Q**:Failed get storage: please add a storage first. (**When adding offline download files**)
+
+**A**:When adding an offline download file, you need to enter which cloud disk you want to download the offline download file to and then click on the `folder` instead of adding it on the home page [**Complete Instructions**](../guide/advanced/offline-download.md)
+
+---
+
+**Q**:failed get objs: failed to list objs: Unable to retrieve user's mysite URL(**When adding onedrive_app**)
+
+**A**:The newly created `OneDrive` user account does not take effect in real time, Delay takes effect, wait for a few hours and try again [**Case**](https://github.com/alist-org/docs/discussions/189#discussioncomment-5928892)
+
+---
+
+**Q**:failed to start: listen tcp 0.0.0.0:5244: bind: address already in use (**When starting the OpenList program**)
+
+**A**:Port number 5244 is already in use, check whether it is occupied (generally you have started an OpenList with port 5244), or modify the port number started by OpenList, [**How to modify**](../configuration/configuration.md#scheme)
+
+---
+
+**Q**:**[When OpenList upload file](why.md#why-do-i-get-413-http-code-when-i-upload-a-file)**:Request failed with status code 413
+
+**A**:Limit the size of the files configured nginx, modify the nginx's `client_max_body_size`,If you are a pagoda to go to the pagoda page to modify [Example](https://blog.csdn.net/u012514495/article/details/127981183)
+
+---
+
+**Q**:**failed get objs: failed to list objs: query fail [61008]**
+
+**A**:It may be because some drivers do not support modifying the file sorting. Try to cancel the file sorting.
+
+---
+
+**Q**:When running `docker logs openlist`, the error appears: FATA[2025-08-12 02:48:46] failed to create config file: open /opt/openlist/data/config.json: permission denied 。
+
+**A**:This is caused by the directory mounted not matching the user permissions running the docker. The solution:
+
+1. Use the `--user` parameter to specify the user running the container, assuming the user is `1000:1000`.
+
+ First, ensure that the `${yourDataDir}` directory has permissions of `1000:1000`. If not, use `sudo chown -R 1000:1000 ${yourDataDir}` to change the directory permissions.
+
+ Then run the Docker with the following command:
+
+```bash
+docker run -d --name openlist --user 1000:1000 -v ${yourDataDir}:/opt/openlist/data -p 5244:5244 openlistteam/openlist
+```
+
+2. Change the owner of the `${yourDataDir}` directory to `1001:1001`, and then run the Docker:
+
+```bash
+sudo chown -R 1001:1001 ${yourDataDir}
+docker run -d --name openlist -v ${yourDataDir}:/opt/openlist/data -p 5244:5244 openlistteam/openlist
+```
diff --git a/pages/en/faq/howto.md b/pages/en/faq/howto.md
new file mode 100644
index 000000000..9e159da09
--- /dev/null
+++ b/pages/en/faq/howto.md
@@ -0,0 +1,113 @@
+---
+top: 1
+categories:
+ - faq
+---
+
+# How to
+
+## How to add password for a file/folder?
+
+Add a [meta](../guide/advanced/meta.md) record.
+
+## How to reverse proxy with sub directory?
+
+An example of using nginx to reverse proxy to https://example.com/openlist:
+
+- Normal installation
+- Set [site_url](../configuration/configuration.md#site-url) to `https://example.com/openlist` or just `/openlist` then restart openlist
+- Add a reverse proxy record in nginx
+
+```nginx
+location /openlist/ {
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header Range $http_range;
+ proxy_set_header If-Range $http_if_range;
+ proxy_redirect off;
+ proxy_pass http://127.0.0.1:5244/openlist/;
+ # the max size of file to upload
+ client_max_body_size 20000m;
+}
+```
+
+## How to get password if i forget it?
+
+If the password is forgotten, it can only be re-**`randomly generated`** or **`manually set`**
+
+```bash
+# Randomly generate a password
+./openlist admin random
+# Manually set a password, `NEW_PASSWORD` refers to the password you need to set
+./openlist admin set NEW_PASSWORD
+```
+
+## How to modify the listening port
+
+Refer to [config](../configuration/configuration.md#scheme)
+
+## How to upgrade
+
+Except for the incompatible version marked in the changelog, you can directly replace the binary file to upgrade.
+
+For Docker user, just remove the old container and pull the new image then run it.
+
+## How to allow guest to upload files
+
+Add a [meta](../guide/advanced/meta.md) record, and open `write` field.
+
+## How to remove "Powered by OpenList" at the bottom?
+
+According to our open source license:
+Permissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. **Copyright and license notices must be preserved.** Contributors provide an express grant of patent rights. When a modified version is used to provide a service over a network, the complete source code of the modified version must be made available.
+
+## When adding a 189 Cloud storage: the device ID does not exist, and a secondary device verification is required
+
+Open the Tianyi Account website at , log in, and then disable the Device Lock..
+
+## When adding 189 Cloud PC storage: prompt need img validate code: verification code
+
+- Click Edit, write the verification code you just saw into the configuration and click Save
+- Click Edit and turn on the Do not use OCR button
+- Or build it yourself [**Ocr interface**](../configuration/global.md#ocr-api)
+- **189 Cloud** Driver has been replaced with sliding verification code because web login has been replaced.**No longer supports OCR and manual input**, if the verification code needs to be used, please use the addition of `Cookie to log in` or use the `189 Cloud PC` Driver. Note: The 189 Cloud Driver is different from the 189 Cloud PC Driver.
+
+## TLS handshake timeout? / read: connection reset by peer? / dns lookup failed? / connect: connection refused / Client.Timeout exceeded while awaiting headers? / no such host?
+
+For network problems such as these, please troubleshoot and solve them yourself.Don't create any issues for this.
+
+## How to add epub reading
+
+Background --> Settings --> Preview --> Iframe preview, written behind the PDF
+
+```html{2-5}
+ /*The comma below is also oh, don’t copy this comment, start copying from the second line*/
+,
+ "epub": {
+ "EPUB.js":"/static/epub.js/viewer.html?url=$e_url"
+ }
+```
+
+Version 3.7.x and higher already support ".epub" reading
+But you need to add it manually (because the database has already been created, it is not good to overwrite it for you, and you will make mistakes)
+If it is the first installation and startup (version 3.7.x and higher), no need to add it manually
+If the secondary directory reverse generation is set, please add the corresponding prefix in [site_url](../configuration/configuration.md#site-url), and then restart OpenList to take effect
+
+### How to quickly locate bugs
+
+If you find a bug, but the `log.log` log is not detailed, you can try to add the `--debug` parameter to start
+
+It is recommended to clear the log file `/log/log.log` in the **OpenList directory before starting with the `--debug` parameter**, so that developers can quickly locate problems later
+
+::: danger
+When using the `--debug` parameter to start, there will be some sensitive data such as **`account password, refresh token`**, etc., so if you need to desensitize before sending it to others
+:::
+
+- **Windows**:`openlist.exe server --debug`
+- **Linux**:`./openlist server --debug`
+- **Mac**: `./openlist server --debug`
+- **Docker**:`docker exec -it openlist ./openlist server --debug` (to be modified, because this command runs OpenList in an already started container, so it will not start a second OpenList)
+
+How to stop the relevant logs after startup? `Ctrl+C` can stop the program (or simply close the program directly)
diff --git a/pages/en/faq/index.md b/pages/en/faq/index.md
new file mode 100644
index 000000000..2e7933f58
--- /dev/null
+++ b/pages/en/faq/index.md
@@ -0,0 +1,3 @@
+# FAQ
+
+
diff --git a/pages/en/faq/seealso.md b/pages/en/faq/seealso.md
new file mode 100644
index 000000000..df3a2d464
--- /dev/null
+++ b/pages/en/faq/seealso.md
@@ -0,0 +1,21 @@
+---
+top: 1
+categories:
+ - faq
+---
+
+# See also
+
+### **The following resources may help you**
+
+> Third party tutorials and information may be outdated and incorrect, and no warranty of availability is made here.
+
+[https://space.bilibili.com/36411485/channel/collectiondetail?sid=686340](https://space.bilibili.com/36411485/channel/collectiondetail?sid=686340)
+
+[https://anwen-anyi.github.io/](https://anwen-anyi.github.io/index/)
+
+[Google](https://www.google.com/search?q=openlist)
+
+[Bing](https://www.bing.com/search?q=openlist)
+
+[Baidu](https://www.baidu.com/baidu?wd=openlist)
diff --git a/pages/en/faq/why.md b/pages/en/faq/why.md
new file mode 100644
index 000000000..412dc3d9e
--- /dev/null
+++ b/pages/en/faq/why.md
@@ -0,0 +1,305 @@
+---
+top: 1
+categories:
+ - faq
+---
+
+# Why
+
+## Why I got the error `failed get storage: can't find storage with rawPath: /` when I open web pages after install/upgrade?
+
+Because you haven't added storage. Click the `Login` button at the bottom to log in and then click `Manage` button to enter the background and add storage on the storage page.
+
+## why i lost all my storage in v3
+
+New versions (V3 and later) are not compatible with V2, so you need to re-add your storage.
+
+## Why I see `failed get aria2 version` error in log?
+
+Because you haven't installed aria2 or the settings of aria2 are wrong. Don't worry, it won't affect the use of OpenList, you can ignore it.
+
+## why i got the error `Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path` when I add new storage?
+
+I guess the error message is pretty clear. Because [mount_path](../guide/drivers/common.md#mount-path) is **UNIQUE**.
+If you see this error when adding storage, but you don't see the corresponding duplicate entry on the web page, use `Ctrl` + `F5` to force refresh page.
+
+## Why can't I preview the video or audio file?
+
+- Requires a browser-supported encoding
+- General browsers do not support h265 encoded video
+- General browsers do not support ac3 encoded audio
+
+In particular, for Safari:
+
+- For cross-origin media, content-type must be the media type, not the generic application/octet-stream. So if the content-type returned by the direct link is application/octet-stream, then Safari will not be able to play.(PS: Why Can AliyunDrive play in Safari? Because the official website of the video playback is not the use of download links, but after the transcoding of AliyunDrive)
+- Aliyun disk development platform driver supports online video playback (also limited to Aliyun disk open platform driver and **Aliyun Video Previewer** option player)
+
+## Why can't I preview the office file?
+
+For microsoft office online viewers, you need:
+
+- External network access
+- The document access address cannot use ip directly, it needs to be accessed through a domain name, and the port must be port 80 / 443
+- The format of the document (must be one of the following):
+- Word: docx, docm, dotm, dotx
+- Excel: xlsx, xlsb, xls, xlsm
+- PowerPoint: pptx, ppsx, ppt, pps, pptm, potm, ppam, potx, ppsm
+- Document size: Word and PowerPoint documents must be less than 10 megabytes; Excel must be less than five megabytes
+
+## Why can't I preview the PDF file?
+
+- We use `pdf.js` as the default PDF previewer. So it requires https+cors.
+- https is opened for yourself, reverse proxy or provide a certificate in the configuration file
+- cors provides support for related cloud disks and cannot be modified by yourself unless the agent is turned on to use the program to transfer
+
+## Why can't package download?
+
+Same as pdf preview, requires https+cors support,and:
+
+- OpenList use stream API of browser to support package download, so it requires browser support. Usually, it is supported by new browsers, such as Chrome, Firefox, Edge, etc.
+
+## Why does it shows `Uploading in the backend` when I upload a file?
+
+- All uploads of this program use server transfer, which will consume server traffic to communicate with the corresponding storage API
+
+## Why do i get `413` http code when i upload a file?
+
+- If you use a reverse proxy, you may need to specify the maximum upload file size(`client_max_body_size`) and timeout in the web server configuration
+- Otherwise, it may happen that the upload is successful but the front end times out and there is no response
+
+## Why can't I download files after add `AliyunDirve` storage and get `InvalidArgument` error?
+
+::: warning
+This is an outdated driver that has been abandoned, is no longer maintained, and will be removed in future versions. We recommend using the officially supported Aliyundrive Open.
+[**Click to view this guide**](../guide/drivers/aliyundrive_open.md)
+:::
+
+Due to referrer restrictions, mobile tokens must be used if you don't open any proxy.
+
+## Why is the uploaded file not displayed/deleted file still/modified in the root directory does not take effect?
+
+There is a half-hour cache by default, which can be modified on the Add Storage page. If you need to refresh immediately, click the refresh button in the lower right corner of the directory that needs to be refreshed.
+
+## Why is it still incorrect although I input the password that get by `./openlist admin` in terminal?
+
+Check whether the directory you run `./openlist admin` and start OpenList is the same. OpenList reads the configuration in the current directory where you run the program by default, so running in different directorys will result in different data being read.
+
+---
+
+- **Here take Windows as an example**: For example, your OpenList file is in the **`D:\Test\OpenList\`** folder, and then you directly start the CMD command running window on the desktop, and then put the D drive Drag the OpenList inside to the command running window to start, and then the configuration file it generates is actually in **`C:\Windows\System32`** here (because CMD is here by default), and then you Obtaining the password is also obtaining the password in this folder. At the same time, because OpenList reads the password in the configuration file in the same directory as OpenList, it is naturally wrong for you to log in with the password.
+ - 
+- Solution: You need to go to the folder where OpenList is located to start or check the password, for example, the above is in **`D:\Test\OpenList\`**, you have to manually go to this folder and then enter Enter the startup command or the command to view the password to obtain the correct password
+ - **Windows**: After going to the directory where OpenList is located, enter CMD in the top address bar and press Enter, and then use the command to obtain the password
+ - 
+ - **Linux**: Use the CD command to go to the directory where OpenList is located to get the correct password
+
+## Why does it prompt System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat
+
+This is caused by the conflict between some scripts in the Tampermonkey extension and the webpage code, such as some automatic answering scripts.
+Please check and disable the relevant scripts on your own.
+
+## What is the difference between the two uploads?
+
+1. **stream** directly puts the binary content of the file into the body, so that the backend can use very little memory, it seem to have no downsides.
+
+2. **form** is to wrap the file into formdata and upload it. The memory used by the backend will be more, but there is no limit on the size.
+
+## What is the difference between the two Aria2?
+
+1. Background management --> Settings --> Others: **Aria2 here is used to download resources offline to the network disk**
+
+2. Front-end interface --> Local settings (the gear in the lower right corner) --> **Aria2 here is used to download the resources in the network disk to the local, which is equivalent to a download method, everyone can use it without worrying about problems**
+
+- As for how to use the first offline download:
+ - For example, if you want to download some resources offline in the **`/OneDrive/TV/Test`** folder, you must first fill in the **address and secret key information** in the background and then manually enter the front end In this folder of the interface, you can see the **offline download** icon (a magnet style) in the lower right corner after entering it, click and enter the link you want to download offline
+ - `Description`: **Offline download, copy and upload** are all in the same way. They are first downloaded from the resource **to the temporary folder of the server** and then uploaded from the **server to the corresponding network disk**
+ - "Copy" can be directly transferred by the server without temporary storage for uploads that **partially do not require** to calculate the Hash value.
+
+```mermaid
+flowchart LR
+ A([ready]) --> B[Download to a temporary folder]
+ B --> C[The server uploads]
+ C --> D[Upload to the network disk]
+ D --> E([end])
+```
+
+## RaiDrive mounts Baidu network disk, you can download files, but you cannot upload files. Throwing files to the mount directory prompts "Prompt "You need permission to perform this operation". How to solve this?
+
+Raidrive is because uploading a file will create an empty file in advance, and Baidu Netdisk does not allow the creation of an empty file.
+
+## Why is the Terabox mounted successfully but the content is not displayed?
+
+Because **`Terabox`** restricts IP, if you access it from a non-overseas IP, you cannot access it, and naturally the content will not be displayed.
+
+(Overseas machines can be used. If you have to use local machines (or domestic machines) to build, you can find a way to let OpenList eat **proxy**)
+
+**Note: Check the relevant settings to ensure that traffic related to '\*.terabox.com' goes through the **proxy\***\*
+
+## Open OpenList prompt System error: TypeError: n.replaceAll is not a function?
+
+Your browser kernel version is too low, just add the following to the custom head.
+
+```html
+
+
+```
+
+If you think it is too slow, you can change to Ali Cloud
+
+```html
+
+```
+
+## Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later.
+
+
+
+If you enter the wrong password for 6 consecutive logins, it will be locked, and you can reset it by restarting OpenList.
+
+## When adding a file to upload, there is an option of "add as task", what does it do?
+
+- After checking, upload to the server (the machine where OpenList is built), and then when uploaded by the server to the network disk, it seems to be visible in the background (it seems to be like this)
+- You will not see it if it is not checked. For details, you can see the problem in the picture below.
+
+
+
+## I am asked to enter the OTP code when I log in. What is the reason?
+
+Are you logging into someone else's account? If it is your own, please enter the 2FA (two-step verification) verification code
+
+What? Don't know the verification code? [**Click to view this guide**](../guide/advanced/2fa.md)
+
+## Use **`sqlite3`** to find that there are more than two files in the data folder, data.db-shm and data.db-wal
+
+These are temporary files created by SQLite in WAL mode to support database transaction processing and concurrent access. The .db-shm file is a shared memory file used to store temporary data, while the .db-wal file is a write-ahead log file that records transaction changes for rollback in case of transaction failure. These two files are associated with the .db file, and it is not recommended to delete them arbitrarily.
+
+## **How do I set it so that visitors can only see the content after logging in?**
+
+There is always one of the following three versions that suits you. Eat it quickly! !
+
+1. Point the directory seen by **`guest`** users to an empty folder, and then write a readme description, don’t ask how to do it yourself[Click to view](#how-to-create-a-completely-blank-folder)
+
+2. Directly encrypt the root directory in the meta information
+
+3. Directly deactivate the **`guest`** user, which will force a jump to the login page (version 3.10.1 and above) - Find a way by yourself Welcome to provide new ways~~
+
+## Baidu cloud disk unofficial download error appears "hit black userlist, hit illegal dlna"
+
+It should be repaired harmoniously, but the interface discoverer said to wait for 24 hours to try, if it still doesn't work, it is really repaired harmoniously.
+
+```json
+{
+ "error_code": 31329,
+ "error_msg": "hit black userlist , hit illegal dlna",
+ "request_id": 8942439159334999112
+}
+```
+
+## How to create a completely blank folder
+
+two ways
+
+1. Mount a local storage, select the folder is empty
+2. Select virtual storage and directly change **"number of files" "number of folders"** to 0, save and then ignore the pop-up interface
+ - What does **Virtual Storage** do? It is generally used during testing. Don’t use it indiscriminately if you don’t understand the normal production environment....
+
+How to add **`Readme`** instructions to an empty folder
+
+1. If you choose local storage, you can consider throwing a Readme.md file into it. If there is an update but the refresh is slow, use the second method if it is too slow
+2. Meta information Select this folder, there are instructions below to write it yourself
+
+What is the use of creating this blank folder? It can be used in conjunction with [**How to set up visitors to access the content after logging in, use the first method**](#how-do-i-set-it-so-that-visitors-can-only-see-the-content-after-logging-in)
+
+## lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./openlist) or accept: function not implemented
+
+Consider using the **musl** version as an alternative due to the version of the **glibc** on your platform is too low,or use docker version.
+
+## What is the extra sign parameter after the file now?
+
+Encrypted for account security, you can view the details by [click to view](../configuration/global.md#sign-all)
+
+## Prompt when adding Aliyun drive (shared) Prompt Post "https://auth.aliyundrive.com/v2/account/token": net/http: TLS handshake timeout
+
+Reason: The VPS is located outside mainland China, and IPv6 is enabled
+Workaround:
+**Method 1**: Add the following three items in the vps hosts and restart the network or restart the vps
+
+- 47.94.245.197 api.aliyundrive.com
+
+- 47.94.245.197 auth.aliyundrive.com
+
+- 121.89.3.30 cn-beijing-data.aliyundrive.net
+
+**Method 2**: Turn off and disable IPv6 of vps
+
+## 123 When the cloud disk is mounted, json: cannot unmarshal string into Go struct field TokenResp.data of type struct { Token string "json:\"token\"" }
+
+
+
+There is a high probability that your device that builds OpenList is temporarily blocked, frozen, blocked, or restricted. Don't mount it yet, wait a few hours and try again or wait a day
+
+(Conclusions from the above questions have been tested)
+
+## Why doesn't PikPak have a name
+
+Because PikPak's server does not set the filename in the `content-disposition` header, this is a PikPak problem and not an OpenList, so it cannot be fixed
+
+## How to query your own OpenList version number
+
+1. Use the command `openlist version`, the console will output
+2. OpenList Manage --> Settings --> Site --> `Version` option
+
+Why is the old version of OpenList still after the update? Generally, docker encounters this problem. You can [**refer to this**](../guide/installation/docker.md#update)
+
+## OpenList's download "Download" option suddenly blank, no content
+
+Check your plug-ins, whether there are ad blocking plug-ins, for example: **AdGuard** and others
+
+Through the console, it is found that "**https://g.alicdn.com/IMM/office-js/1.1.5/aliyun-web-office-sdk.min.js**" has been blocked,
+
+Maybe other links are blocked, manually add the blocked domain name to the whitelist or close the plug-in, or it may be that the plug-in is convulsed
+
+
+
+## Why do prompts appear after clicking "Login success" and "Guest is disabled, login please"
+
+Please check whether your site is connected to a `CDN`. If so, please remove the CDN cache.
+
+Connecting OpenList to a CDN is not recommended for non-professionals. [See here](https://t.me/OpenListOfficial/23).
+
+## Why has the "Add" button on the sharing management page been disabled?
+
+Your account does not have "Sharing" permissions.
+
+- If you are an administrator, please go to the User Management interface to enable the required permissions for yourself.
+- If you are a regular user, please contact your administrator to request access.
+
+## Why can't I use a WebDAV client to manage (writing operations) files in OpenList?
+
+The reason is the same as the previous one: you need the "WebDAV Manage" permission.
+
+## Why is my Markdown file preview showing garbled text?
+
+## Why aren't lists in my Markdown file visible during preview?
+
+This phenomenon is mainly observed in Markdown files that include tables or code. As a security measure to prevent the execution of potentially malicious scripts from untrusted sources, the system has XSS protection enabled by default.
+
+This mechanism can be disabled by navigating to "**Settings / Preview**" and deactivating the "**Filter scripts in README**" option.
+
+Please note that disabling this protective measure will make your device vulnerable to XSS (cross-site scripting) attacks. Users are fully responsible for the security of their own devices.
+
+## Why can't I connect to OpenList via an FTP client even after I've filled in the FTP mount configuration?
+
+Besides configuring the settings in the admin panel, you must also set `enable` to `true` under the `ftp` section in the configuration file (`config.json`) to activate the FTP connection feature.
+
+Additionally, any changes made in the admin panel require a restart of OpenList to take effect.
+
+If you wish to connect using the SFTP protocol, please enable it by setting `enable` to `true` in the `sftp`(rather than `ftp`) section of the configuration file.
+
+## Why are the filenames in my ZIP file showing up as garbled text/characters when I preview it?
+
+Older versions of the ZIP format do not mandate UTF-8 encoding for filenames, which can lead to decoding problems for non-ASCII characters.
+
+To resolve this, you can adjust the "**Alternative Encoding for ZIP Files**" setting under "**Settings / Preview**".
+
+For Simplified Chinese users, you can fix this issue by setting this value to "**GBK**" in most cases.
diff --git a/pages/en/guide/advanced/2fa.md b/pages/en/guide/advanced/2fa.md
new file mode 100644
index 000000000..41bb64e90
--- /dev/null
+++ b/pages/en/guide/advanced/2fa.md
@@ -0,0 +1,51 @@
+---
+categories:
+ - guide
+ - advanced
+top: 110
+---
+
+# 2Fa
+
+## Enable 2FA verification
+
+To enable 2-factor authentication, you need to install a app that support 2FA (such as [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2),[Microsoft Authenticator](https://support.microsoft.com/en-us/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a)), on your phone.
+
+Then login to OpenList manage and goto `Profile` page, click `Enable 2FA` button, scan the QR code with your 2FA app, and enter the code generated by your 2FA app.
+
+Finally, click `Verify` button to enable 2FA.
+
+- Each user can set a different "2FA" verification, how to cancel see the method below
+
+## Cancel 2FA verification
+
+**1. Forgot 2FA for a non-Admin account:**
+
+If you’ve forgotten the 2FA for a non-admin account, you can contact an administrator to clear it. The steps are as follows:
+
+- Go to the backend → Select "Users" → Click **"Cancel Two-Factor Authentication"**.
+
+If the 2FA is lost for an admin account, please refer to step 2 for instructions on clearing it.
+
+---
+
+**2. How to access the folder where OpenList is located and clear 2FA:**
+
+- **Windows**: Navigate to the folder where OpenList is located and enter the command:
+ `openlist.exe cancel2fa`
+
+- **Linux**: Similarly, go to the OpenList folder and enter the command:
+ `./openlist cancel2fa`
+
+- **Docker**: In a Docker environment, enter the command:
+ `docker exec -it openlist ./openlist cancel2fa`
+
+After running these commands, a restart will apply the changes.
+
+---
+
+**3. Actions after canceling 2FA:**
+
+In the "Users" section of the backend, you will find the **"Cancel Two-Factor Authentication"** option. After canceling, if issues persist, try restarting OpenList.
+
+**Note**: If you don’t see the **"Cancel Two-Factor Authentication"** option, please check if you’re using the latest version. If not, please update your version.
diff --git a/pages/en/guide/advanced/alias.md b/pages/en/guide/advanced/alias.md
new file mode 100644
index 000000000..c04dc1014
--- /dev/null
+++ b/pages/en/guide/advanced/alias.md
@@ -0,0 +1,10 @@
+---
+categories:
+ - guide
+ - advanced
+top: 120
+---
+
+# Alias
+
+
diff --git a/pages/en/guide/advanced/backup.md b/pages/en/guide/advanced/backup.md
new file mode 100644
index 000000000..eaaf79819
--- /dev/null
+++ b/pages/en/guide/advanced/backup.md
@@ -0,0 +1,32 @@
+---
+categories:
+ - guide
+ - advanced
+top: 20
+---
+
+# Backup&Restore
+
+## Method 1-Built-in
+
+Use `OpenList` to manage `Backup/Restore` options
+
+1. Backup: Backup OpenList data (**does not include index**)
+2. Recovery: Backup files before recovery
+3. Override: Select override when recovery, and will override the user information
+4. Encryption Password:Fill in the `ENCRYPTION PASSWORD` Export, the information will be encrypted when exporting.You also need to enter the `ENCRYPTION PASSWORD` first before importing.
+
+ 
+
+## Method 2-Sqlite3
+
+Back up the `data/data.db` database in the `OpenList` directory, and wait for the new environment to replace it directly (**contains index data**)
+
+- If there are two files, if there are `data.db-shm` and `data.db-wal`, they must be backup together.
+- It is recommended to stop running OpenList and then backup, so that the two files of `data.db-shm` and`data.db-wal` will be merged with the `data.db`
+
+ 
+
+## Method 3-Other database
+
+Other, if you use `mysql, postgres` and other non `sqlite database`, please solve it by yourself (**include indexing data**)
diff --git a/pages/en/guide/advanced/balance.md b/pages/en/guide/advanced/balance.md
new file mode 100644
index 000000000..7057627c5
--- /dev/null
+++ b/pages/en/guide/advanced/balance.md
@@ -0,0 +1,104 @@
+---
+categories:
+ - guide
+ - advanced
+top: 90
+---
+
+# Load balancing
+
+## Link load balancing
+
+Link load balancing distributes traffic across multiple links to alleviate bandwidth pressure on any single link. This load balancing mechanism is only applicable when traffic arrives at the same storage service via multiple distinct links. The system assumes that the drivers participating in the load balancing can always automatically maintain content consistency and will simply forward all requests in a round-robin manner:
+
+```mermaid
+graph LR
+ User -->|RW file1| OpenList
+ OpenList -->|Write file1| Link1
+ OpenList -->|Read file1| Link2
+ Link1 -->|Write file1| Serv[Storage Service]
+ Link2 -->|Read file1| Serv[Storage Service]
+```
+
+To perform this load balancing mechanism, mount the first driver normally, and then add the remaining load-balancing drivers using a mount path formatted as `first storage mount path + .balance + any additional content`.
+
+E.g:
+
+- Storage 1: `test`
+- Storage 2: `test.balance1`
+- Storage 3: `test.balance2`
+- Storage 4: `test.balance3`
+- ...
+- Storage n: `test.balancen`
+
+
+The first is marked with a red box. It is the main mount, which is displayed on the front page. The remaining nine are the first load balancing on the first one.
+
+## Storage load balancing
+
+Storage Load Balancing is used to distribute storage occupancy across multiple storage services, achieving the effect of abstracting multiple storage spaces into one large storage space with a capacity equal to the sum of all individual spaces (similar to RAID 0). The system will assign each uploaded file to a random storage service and forward all read and modification requests for that file to that specific service:
+
+```mermaid
+graph LR
+ User -->|Requests| OpenList
+ OpenList -->|Write file1| Serv1[Storage Service 1]
+ OpenList -->|Write file2| Serv2[Storage Service 2]
+ OpenList -->|Read file1| Serv1
+ OpenList -->|Rename file1| Serv1
+ OpenList -->|Read file2| Serv2
+```
+
+This type of load balancing can be implemented using the putting load balancing feature of the [Alias](/en/guide/drivers/alias) driver, with the following configuration:
+
+- **Reading conflict policy**: **Get the file corresponding to the first conflict path** (The load balancing function of the Rading conflict policy is used to implement the load balancing described in the [Multi-source reading load balancing](/en/guide/advanced/balance#multi-source-reading-load-balancing) section. Based on the principles of the two load balancing schemes, enabling both simultaneously does not achieve a 1+1>=2 effect).
+- **Writing conflict policy**: Choose either **Allow full conflict paths** or **Write into all conflict paths** (If the **Write into the first conflict path** policy is used, folder creation operations will only be forwarded to one driver. This will cause that folder and its descendant folders to be unable to continue load balancing as they won't exist on other drivers).
+- **Putting conflict policy**: Choose one of **Random load balancing**, **Weighted random load balancing based on remaining space**, or **Strict weighted random load balancing based on remaining space** according to your needs.
+
+The effect achieved with the above configuration:
+
+```mermaid
+graph LR
+ OpenList -->|File1,File2,File3| Alias
+ Alias -->|File3| Driver1[Driver 1]
+ Alias -->|File1| Driver2[Driver 2]
+ Alias -->|File2| Driver3[Driver 3]
+```
+
+#### Load balancing by file chunks
+
+Sometimes, the files that need to be load-balanced across storage are relatively large, and performing load balancing on a per-file basis is not granular enough. You can use the [Chunk](/en/guide/drivers/chunk) driver to split files into fixed-size blocks and then apply storage load balancing to these blocks. The specific configuration is as follows:
+
+- **Chunk**: In the remote path, fill in the mount path of the **Alias** driver. Configure other settings as needed.
+- **Alias**: Keep the configuration consistent with the description above.
+
+The achieved effect is:
+
+```mermaid
+graph LR
+ OpenList -->|A Large File| Chunk
+ Chunk -->|Block1, Block2, Block3| Alias
+ Alias -->|Block1| Driver1[Driver 1]
+ Alias -->|Block3| Driver2[Driver 2]
+ Alias -->|Block2| Driver3[Driver 3]
+```
+
+## Multi-source reading load balancing
+
+Multi-source reading load balancing allows copies of a file to be distributed across several different storage services. When a user accesses the file, the system randomly selects one of the copies to return, thereby reducing the uplink bandwidth pressure on any single storage service (similar to RAID 1). The key difference between this load balancing strategy and [Link load balancing](/en/guide/advanced/balance#link-load-balancing) is that since the load-balanced storage services are treated as multiple, independent file systems with no automatic synchronization, OpenList will forward write operations to **all** storage services, rather than to just one of them:
+
+```mermaid
+graph LR
+ User -->|RW file1,file2| OpenList
+ OpenList -->|Write file1| Serv1[Storage Service 1]
+ OpenList -->|Write file2| Serv1
+ OpenList -->|Write file1| Serv2[Storage Service 2]
+ OpenList -->|Write file2| Serv2
+ OpenList -->|Read file1| Serv1
+ OpenList -->|Read file2| Serv2
+```
+
+This type of load balancing can be implemented using the reading load balancing feature of the [Alias](/en/guide/drivers/alias) driver, with the following configuration:
+
+- **Reading conflict policy**: Choose either **Load balancing on a per-file basis** or **Load balancing on a per-part basis**.
+- **Writing conflict policy**: Choose either **Allow full conflict paths** or **Write into all conflict paths** (If the **Write into the first conflict path** policy is used, folder creation operations will be forwarded to only one driver. This will prevent that folder and its descendant folders from continuing to participate in load balancing, as they won't exist on other drivers).
+- **Putting conflict policy**: Choose either **Allow full conflict paths** or **Put into all conflict paths** (The load balancing function of the Putting conflict policy is used to implement the load balancing described in the [Storage Load Balancing](/en/guide/advanced/balance#storage-load-balancing) section. Based on the principles of the two load balancing schemes, enabling both simultaneously does not achieve a 1+1>=2 effect).
diff --git a/pages/en/guide/advanced/ftp.md b/pages/en/guide/advanced/ftp.md
new file mode 100644
index 000000000..c38346df9
--- /dev/null
+++ b/pages/en/guide/advanced/ftp.md
@@ -0,0 +1,163 @@
+---
+categories:
+ - guide
+ - advanced
+top: 30
+---
+
+# FTP / SFTP
+
+::: tip
+Any adjustments made to FTP-related configurations on the web management page must restart OpenList to take effect.
+
+When using FTP for downloading, only the local proxy will be used.
+
+:::
+
+## FTP Configurations
+
+| Field | Meaning | Example Value |
+| --------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------- |
+| enable | Whether to enable | `true` / `false` |
+| listen | (Allowed access IP mask): port | `":5221"` (default) / `"0.0.0.0:21"` / `"127.0.0.1:2121"` |
+| find_pasv_port_attempts | Maximum attempts to find a port due to port conflict in passive transfer | `50` |
+| active_transfer_port_non_20 | Enable ports other than 20 for active transfer ports | `true` / `false` |
+| idle_timeout | Maximum idle time (in seconds) without client requests | `900` |
+| connection_timeout | Connection timeout time | `30` |
+| disable_active_mode | Disable active transfer mode | `true` / `false` |
+| default_transfer_binary | Default transfer in binary mode | `true` / `false` |
+| enable_active_conn_ip_check | Check the IP of the client for data stream TCP connection in active transfer mode | `true` / `false` |
+| enable_pasv_conn_ip_check | Check the IP of the client for data stream TCP connection in passive transfer mode | `true` / `false` |
+
+## FTP Settings
+
+Before understanding the FTP configuration options, it is important to first understand how the FTP protocol works. The FTP protocol uses **two TCP connections** for communication, which are referred to as the "**control flow**" and the "**data flow**." Port 21 is the default control flow port for the FTP protocol. The FTP server continuously listens on this port, waiting for connections from clients and responding accordingly. **The control flow only transmits client requests and server error messages, without transferring file contents or file listings.** In OpenList, the control flow port is determined by the `listen` parameter in the configuration file, with a default value of 5221. The client must be able to access this port on the server for the protocol to function properly.
+
+The establishment of the data flow can be done in two main ways, known as "active mode" and "passive mode":
+
+In active mode, the client actively listens on a port and sends the port number to the server using the `PORT` command. The server then actively connects to the client and transmits files or a list of files. In this mode, the client must be directly accessible by the server. Therefore, in the context of widespread NAT, this mode generally only works when both the server and client are in the same subnet.
+
+```mermaid
+---
+title: Active Mode
+---
+sequenceDiagram
+ Client->>Server: Sends PORT command with client's IP address and data port number
+ Server->>Client: Actively connects to the client and transmits files or file list over the newly established connection (data stream)
+```
+
+In passive mode, the client first sends the `PASV` or `EPSV` command in the control stream, requesting the server to listen on a new data port. The server then returns the port number of the new listening port to the client in the control stream. After the client establishes a connection with that port, data transfer begins. In this mode, the server does not actively initiate connections to the client, so it only needs to be outside of NAT. However, since the passive transfer port is not predetermined but determined before the connection is initiated, additional configuration is required when there are port mappings between the server and the client, or when only a subset of the server's ports are available for client connections in complex network environments.
+
+```mermaid
+---
+title: Passive Mode
+---
+sequenceDiagram
+ Client->>Server: Sends PASV or EPSV command in control stream
+ Server-->>Client: Server's public IP (only PASV) and passive transfer port number for data transfer
+ Client->>Server: Initiates TCP connection to the server's IP and port, then transfers files or file list over the newly established connection (data stream)
+```
+
+- FTP Server Public Network Address
+
+ This is the IP address that the server sends to the client in the `PASV` command. If the server and the client are within the same subnet, the server's internal IP address can be used. Even if the server and the client are on the same machine, `127.0.0.1` can be used. However, if the server and client are not in the same subnet, the server's IP address that is accessible by the client must be specified.
+
+ A domain name can also be specified. In this case, the default DNS will resolve the domain name to an IP address. However, since `PASV` only supports IPv4 addresses, if both an AAAA (IPv6) and an A (IPv4) record exist for the domain, the A record will be used. If only an AAAA record exists without an A record, the result is unknown.
+
+ This field does not affect the `EPSV` command, but leaving this field invalid will cause the FTP server to fail to start. Therefore, if your FTP client only uses the `EPSV` command, you may consider keeping the default value `127.0.0.1`.
+
+- FTP Passive Transfer Port Mapping
+
+ This field consists of a series of "mapping groups" separated by commas (`,`) or newlines. The legal forms for a "mapping group" are as follows:
+ 1. ``
+ 2. `-`
+ 3. `:`
+ 4. `-::`
+
+ All port numbers must be between 1024 and 65535 (inclusive), and the starting port number of a range must be less than the ending port number.
+
+ For cases where this field is left blank, the server will choose any port between 1024 and 65535 for passive transfer and will not perform any mapping.
+ - Each "mapping group type 1" specifies a single port to be used for passive transfer, and no mapping will be performed for that port.
+ - Each "mapping group type 2" specifies a range of ports, and all ports in that range will be used for passive transfer without any mapping.
+ - Each "mapping group type 3" specifies a listening port to be used for passive transfer, and when the server selects this port, it will return the "response port number" to the client.
+ - "Mapping group type 4" requires that the two ranges before and after the colon `:` have equal lengths. Each "mapping group type 4" forms a one-to-one pairing of port numbers, where each pair is treated as a "mapping group type 3."
+
+ The following are legal formats:
+ - `1024`
+ - `4001-5000,5001-6000:50001-510004000:65535`
+
+ The following are illegal formats:
+ - `1023` (less than 1024)
+ - `65536` (greater than 65535)
+ - `4000, 5000` (space after the comma)
+ - `2000 - 3000 : 4000 - 5000` (spaces are illegal)
+ - `2000-2001:3000-3002` (unequal length of ranges)
+
+ If the field is invalid, the server will choose any port between 1024 and 65535 for passive transfer without performing any mapping.
+
+ The design of port mapping is intended to address the complexity of external port mapping. For example, if the server is running inside a Docker container and uses port 2000 for passive transfer, but Docker maps port 2000 inside the container to port 12000 on the host machine, you can achieve this mapping using the configuration `12000:2000`.
+
+```mermaid
+sequenceDiagram
+ participant Client
+ participant Port Mapping
+ participant Server
+ Client->>Server: Send EPSV command
+ Server-->>Client: Return 12000
+ Client->>Port Mapping: Connect to port 12000
+ Port Mapping->>Server: Forward to port 2000
+```
+
+If there are multiple layers of port mapping between the server and the client, only the port number closest to the client needs to be specified before the `:` symbol, and only the port number closest to the server needs to be specified after the `:` symbol. For example, in the following scenario, you can fill in `2000:5000`:
+
+```mermaid
+sequenceDiagram
+ participant Client
+ participant NAT Traversal Service
+ participant Soft Router Port Forwarding
+ participant Docker Container Port Mapping
+ participant OpenList Process
+ Client->>NAT Traversal Service: 2000
+ NAT Traversal Service->>Soft Router Port Forwarding: 3000
+ Soft Router Port Forwarding->>Docker Container Port Mapping: 4000
+ Docker Container Port Mapping->>OpenList Process: 5000
+```
+
+- FTP Proxy User-Agent Request Header
+
+ Some storage drivers require a User-Agent request header when accessing the FTP server. You can simply use any fake value for this header.
+
+- Force FTP Connection to Use Explicit TLS
+
+ Forces the use of the FTPS protocol, which only encrypts the data stream and not the control stream.
+ If the "Enable FTP Implicit TLS" option is enabled, this option will be ignored.
+
+ If no valid TLS private key and certificate are provided, and this option is not enabled, the server will only accept the FTP protocol.
+
+ If valid TLS private key and certificate are provided, but this option is not enabled, the server will accept both the FTP and FTPS protocols.
+
+ If no valid TLS private key and certificate are provided, but this option is enabled, the FTP server will fail to start.
+
+- Enable FTP Implicit TLS
+
+ Uses the FTPS protocol, which encrypts both the data stream and the control stream. This makes it incompatible with FTP and FTPS (explicit) protocols.
+
+ When this option is enabled, the "Force FTP Connection to Use Explicit TLS" option will be ignored.
+ If no valid TLS private key and certificate are provided but this option is enabled, the FTP server will fail to start.
+
+- FTP TLS Private Key Path
+
+ The path to the TLS private key file. Leaving it empty or providing an invalid path means TLS will not be enabled.
+
+ Enabling TLS may require the client to access the server using a domain name, though the "FTP Server Public Address" can still be an IP address.
+
+- FTP TLS Certificate Path
+
+ The path to the TLS certificate file. Leaving it empty or providing an invalid path means TLS will not be enabled.
+
+## SFTP Configurations
+
+| Field | Meaning | Example Value |
+| ------ | ------------------------------ | --------------------------------------------------------- |
+| enable | Whether enabled | `true` / `false` |
+| listen | (Allowed access IP mask)\:port | `":5222"` (default) / `"0.0.0.0:22"` / `"127.0.0.1:2222"` |
diff --git a/pages/en/guide/advanced/index.md b/pages/en/guide/advanced/index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/en/guide/advanced/ipa.md b/pages/en/guide/advanced/ipa.md
new file mode 100644
index 000000000..7bfd61b04
--- /dev/null
+++ b/pages/en/guide/advanced/ipa.md
@@ -0,0 +1,98 @@
+---
+categories:
+ - guide
+ - advanced
+top: 70
+---
+
+# IPA install
+
+## 1. IPA native installation
+
+You can directly upload the ipa file.
+But for **ios>=16**, you need to name the ipa file: `original file name@bundle-identifier.ipa`, that is, you need to add `@bundle-identifier` on the original basis, in which `bundle-identifier` is the `CFBundleIdentifier` of Info.plist in the IPA package. Such as:
+
+- aszs@rn.notes.best.ipa
+ Recommended to use [ipa-renamer](https://github.com/Xhofe/ipa-renamer) to rename your ipa files automatically and quickly.
+- If you are a mobile phone user, you can also rename the IPA file, but you must know the format mentioned above, but there is no mobile phone renaming software, please solve it yourself...
+
+### Tips
+
+- **.ipa installation requires https and a valid certificate** , not just a package can be installed without a signature
+ - How to change the name of the computer version
+
+
+
+ - How to change the name of the IOS 16 mobile phone
+
+
+
+**Installation Demo**: Deploy **HTTPS** and **IPA files** are signed prerequisites, if **IOS16 rename by yourself** If you can’t install it yourself, please check the problem yourself
+
+- **Installation demo environment**: IOS15.4.1 iPhone12PM, personal certificate, HTTPS
+
+
+
+## 2. TrollStore install
+
+**Requires OpenList version ≥ 3.12.2 and above**,Devices that support the installation of TrollStore (jailbroken devices are not explained here)
+
+For more devices, please see the table below. The content of the chart comes from [**TrollStore**](https://github.com/opa334/TrollStore)
+
+Chart information update is uncertain, you can go to view https://ios.cfw.guide/installing-trollstore
+
+| From | To | **arm64 (A8)** | arm64 (A9-A11) | arm64e (A12-A17/M1-M2) |
+| :--------------------: | :--------------------: | :--------------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :----------------------------------------------------------------------------: |
+| 14.0 beta 1and earlier | 14.0 beta 1and earlier | Unsupported | Unsupported | Unsupported |
+| 14.0 beta 2 | 14.8.1 | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 15.0 | 15.5 beta 4 | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 15.5 | 15.5 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 15.6 beta 1 | 15.6 beta 3 | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 15.6 beta 4 | 15.6.1 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 15.7 | 15.7.1 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
+| 15.7.2 | 15.8.2 | [TrollMisaka](https://ios.cfw.guide/installing-trollstore-trollmisaka) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
+| 16.0 beta 1 | 16.0 beta 3 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
+| 16.0 beta 4 | 16.6.1 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
+| 16.7 RC | 16.7 RC | Not Applicable | [TrollHelper](https://ios.cfw.guide/installing-trollstore-trollhelper) | **Coming Soon** |
+| 16.7 | 16.7.8 | Not Applicable | Unsupported | Unsupported |
+| 17.0 beta 1 | 17.0 beta 4 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | **Coming Soon** |
+| 17.0 beta 5 | 17.0 | Not Applicable | [TrollHelper](https://ios.cfw.guide/installing-trollstore-trollhelper) | **Coming Soon** |
+| 17.0.1 and later | 17.0.1 and later | Not Applicable | Unsupported | Unsupported |
+
+ IPA Resources :gift:
+
+### Installation example
+
+If you want to use the installation is very simple, click the **TrollStore** button to install.
+
+
+
+### Other instructions
+
+1. If you click the **TrollStore** button to open Apple's magnifying glass, it is because of the following reasons
+ - Your `TrollStore` version number is less than version 1.3+, it is recommended to update to the latest version directly
+ - Your URL scheme is not enabled. If you enable it, remember to click the first option to log out immediately **(Rebuild Now)**
+ - 
+2. What is the wake-up format of the TrollStore URL?
+ > `apple-magnifier://install?url=`
+3. Is there any benefit to this installation?
+ - See the flow chart below for explanation
+
+```mermaid
+---
+title: Is there any benefit to this installation?
+---
+flowchart TB
+ A-->B
+ subgraph A[original process]
+ C[First download the application from OpenList]-->D[find the downloaded software]
+ D-->E[click on the software and select share in the upper right corner]
+ E-->F[find the troll icon]
+ F-->G[jump into the troll software to install]
+ G-->H[install and delete the software]
+ end
+ subgraph B[troll process]
+ I[Click the OpenList troll install button and click the pop-up window prompt]-->J[enter the troll app and wait for download]
+ J-->K[after downloading, click the install button]
+ end
+```
diff --git a/pages/en/guide/advanced/mcp.md b/pages/en/guide/advanced/mcp.md
new file mode 100644
index 000000000..1adcd9ae1
--- /dev/null
+++ b/pages/en/guide/advanced/mcp.md
@@ -0,0 +1,157 @@
+---
+categories:
+ - guide
+ - advanced
+top: 20
+---
+
+# MCP
+
+[MCP (Model Context Protocol)](https://modelcontextprotocol.io) is an open protocol that standardizes how applications provide context and tools to Large Language Models (LLMs). OpenList implements MCP as a **Streamable HTTP** transport endpoint, enabling AI agents and MCP clients to interact with file storage.
+
+With the OpenList MCP endpoint, you can:
+
+- List files and directories
+- Get file or directory details
+- Obtain download links
+
+## How to Enable
+
+1. Open the [Configuration File](../../configuration/configuration.md#mcp)
+2. Set `mcp.enable` to `true`:
+
+```json{2}
+ "mcp": {
+ "enable": true
+ }
+```
+
+3. Restart OpenList for the change to take effect
+4. The MCP endpoint is now available at `http[s]://your-domain:port/mcp`
+
+## MCP Client Configuration
+
+To connect an MCP client (such as an AI coding agent that supports MCP) to OpenList, use the following configuration:
+
+**Transport type**: Streamable HTTP
+
+**URL**: `http[s]://your-domain:port/mcp`
+
+**Authentication**: Token Authentication. The token is your OpenList login token — include it directly in the `Authorization` header of each request (e.g. `Authorization: `). Do **NOT** add a `Bearer` prefix. Obtain the token from your OpenList account settings page or via the API.
+
+::: warning
+OpenList's authentication middleware reads the `Authorization` header value as-is. Adding a `Bearer ` prefix will result in authentication failure. Use `Authorization: ` only.
+:::
+
+**Protocol version**: `2025-11-25` (also compatible with `2025-06-18`)
+
+**Session handling**: A session is created on `initialize` and identified via the `MCP-Session-Id` response header. You must include this header in subsequent requests.
+
+## Available Tools
+
+### `openlist.fs.list`
+
+List files and directories under a mount path that the current user can access.
+
+**Parameters**:
+
+| Parameter | Type | Required | Description |
+| ---------- | --------- | -------- | ---------------------------------------------- |
+| `path` | `string` | Yes | Mount path to list, e.g. `"/"` or `"/movies"` |
+| `refresh` | `boolean` | No | Refresh the directory listing before returning |
+| `password` | `string` | No | Optional password for protected paths |
+| `page` | `integer` | No | 1-based page number (default: 1) |
+| `per_page` | `integer` | No | Page size (default: all items) |
+
+**Response**: Returns file list with name, size, type, modification time, thumbnail, hash info, and storage details.
+
+### `openlist.fs.get`
+
+Get file or directory details for a mount path that the current user can access.
+
+**Parameters**:
+
+| Parameter | Type | Required | Description |
+| ---------- | -------- | -------- | ------------------------------------------------ |
+| `path` | `string` | Yes | Mount path to inspect, e.g. `"/movies/demo.mp4"` |
+| `password` | `string` | No | Optional password for protected paths |
+
+**Response**: Returns file details including name, size, type, modification time, raw URL, readme, header, provider, and related files at the same level.
+
+### `openlist.fs.link`
+
+Return usable link information for a file path that the current user can access.
+
+**Parameters**:
+
+| Parameter | Type | Required | Description |
+| ---------- | -------- | -------- | ----------------------------------------------- |
+| `path` | `string` | Yes | File mount path, e.g. `"/movies/demo.mp4"` |
+| `password` | `string` | No | Optional password for protected paths |
+| `type` | `string` | No | Optional link type forwarded to storage drivers |
+
+**Response**: Returns link information including direct URL, proxy URL, download URL, HTTP headers, content length, concurrency, and part size (for multi-part downloads).
+
+## Protocol Details
+
+### Transport
+
+OpenList implements the MCP **Streamable HTTP** transport. The endpoint accepts:
+
+- `POST /mcp` — Main endpoint for all MCP JSON-RPC requests
+- `GET /mcp` — Returns `405 Method Not Allowed` with `Allow: POST, DELETE` (used for CORS preflight validation)
+- `DELETE /mcp` — Terminates an active session (requires `MCP-Session-Id` header)
+
+### Authentication
+
+The MCP endpoint reuses OpenList's authentication middleware. Requests must include a valid `Authorization` header with a valid user token. The session is bound to the authenticated user — a user cannot use sessions belonging to other users.
+
+### Session Lifecycle
+
+1. **Initialize**: Client sends `initialize` request. Server returns a `MCP-Session-Id` response header.
+2. **Notify Initialized**: Client sends `notifications/initialized` to mark the session as ready.
+3. **Tool Calls**: Client sends `tools/list` and `tools/call` requests with the `MCP-Session-Id` header.
+4. **Ping**: Client may send `ping` to keep the session alive.
+5. **Cleanup**: Sessions expire after 30 minutes of inactivity. Global maximum: 128 sessions per server, 16 sessions per user. The least recently used sessions are evicted first.
+
+### Protocol Version
+
+Supported protocol versions: `2025-11-25` (default), `2025-06-18`.
+
+The server returns its protocol version during `initialize` negotiation. Subsequent requests must carry a compatible `MCP-Protocol-Version` header matching the negotiated version.
+
+### Error Codes
+
+| Code | Meaning |
+| ------ | ---------------------------------- |
+| -32700 | Parse error |
+| -32600 | Invalid request |
+| -32601 | Method not found |
+| -32602 | Invalid params |
+| -32603 | Internal error |
+| -32000 | Bad request (missing headers, etc) |
+| -32001 | Session/user not found |
+| -32002 | Session not initialized |
+| -32003 | Permission error |
+
+## Example: Using with AI Coding Agents
+
+Many AI coding assistants support the MCP protocol and can be configured to use OpenList as a file system tool. Below is an example configuration (e.g., for VS Code or Claude Desktop):
+
+```json
+{
+ "mcpServers": {
+ "openlist": {
+ "type": "http",
+ "url": "https://your-domain:port/mcp",
+ "headers": {
+ "Authorization": "YOUR_OPENLIST_TOKEN"
+ }
+ }
+ }
+}
+```
+
+Replace `YOUR_OPENLIST_TOKEN` with your actual OpenList authentication token, which can be obtained from the OpenList management panel.
+
+> **Warning**: Do **NOT** prefix the token with `Bearer `. The `Authorization` header value must be the token itself, nothing else.
diff --git a/pages/en/guide/advanced/meta.md b/pages/en/guide/advanced/meta.md
new file mode 100644
index 000000000..2fdf1ee7e
--- /dev/null
+++ b/pages/en/guide/advanced/meta.md
@@ -0,0 +1,83 @@
+---
+categories:
+ - guide
+ - advanced
+top: 80
+---
+
+# Meta
+
+Most settings in meta information apply to `All Roles`. The `Read Users` and `Write Users` fields are exceptions — they allow you to restrict access to specific users.
+
+## Path
+
+The path for this meta to take effect.
+
+## Password
+
+Password required to access this path.
+
+- Meta information password will not take effect when accessed using `WebDav`
+
+::: danger Notes
+If you want the password to be effective in subfolders, please check `Apply to sub folder` after the password. Do not check `Write` and then check `Apply to sub folder`
+
+The correct check example is shown below. If you configure the options correctly, if you check the wrong option `Write` and then check `Apply to sub folder`, it will cause anyone to have permission to write dangerous operations
+
+
+
+
+
+:::
+
+## Read Users
+
+A whitelist of users allowed to read this path. If the list is non-empty, only the selected users can access the path; all other users will be denied access.
+
+- Users are selected by name in the management interface
+- Check `Apply to sub folder` to also restrict sub-directories
+
+## Write Users
+
+A whitelist of users allowed to write to this path. If the list is non-empty, only the selected users can perform write operations (upload, create, rename, move, delete) on this path.
+
+- Users are selected by name in the management interface
+- Check `Apply to sub folder` to also restrict sub-directories
+
+## Write Content Bypass
+
+Allow any user to make directory, create new file and upload files, bypassing user-level write permission checks.
+
+## Hide
+
+The objects to hide of this path, One regular expression (in `Golang`) per line
+
+- Meta information hiding can take effect when accessed using `WebDav`
+
+## Readme
+
+The Readme to render while enter this path, support markdown content or markdown link.
+
+- Show at bottom of list
+- The automatically rendered file name is: **`readme.md`**
+
+## Header
+
+The Readme to render while enter this path, support markdown content or markdown link.
+
+- Show at top of list
+- The automatically rendered file name is: **`top.md`**
+ - Files can not be displayed in the list, for example `readme.md` is not displayed in the list
+ - Backstage --> Settings --> Global --> Hidden files --> Add newline `/\/top.md/i`
+
+## Apply to sub folder
+
+Apply this meta to sub folder of specific path
+
+## :warning: Tips
+
+Regarding hidden, users without permissions can search for hidden folders/files, solutions:
+
+:white_check_mark: If you want to hide the folder in a folder, create a new Yuan information alone, and select the folder we want to hide,,Hidden if you want to hide everything, write directly`.*`
+
+:x: You cannot directly fill in the meta information of the root directory `/`, and then fill in the folder we want to hide, the error case [View details](https://github.com/alist-org/alist/issues/4494) > 
diff --git a/pages/en/guide/advanced/offline-download.md b/pages/en/guide/advanced/offline-download.md
new file mode 100644
index 000000000..e32cbaccd
--- /dev/null
+++ b/pages/en/guide/advanced/offline-download.md
@@ -0,0 +1,198 @@
+---
+categories:
+ - guide
+ - advanced
+top: 50
+---
+
+# Offline download
+
+## Please read this tip before use
+
+::: warning Please read the following tips carefully
+There are two kinds of software with offline download function
+
+The two usages are the same, and the software configuration is set in advance (see the following instructions for specific configuration),
+
+Then go back to the front-end interface, **find the folder you want to upload offline files to, and you can manually enter the folder**
+
+Then find the offline download button in the lower right corner, and choose to use Aria2 download or qBittorrent download (>v 3.11.0)
+
+If you use **docker**, please map the following two default paths by yourself. (mapped to the same directory on the host machine)
+
+- **/opt/openlist/data/temp/aria2**
+- **/opt/openlist/data/temp/qBittorrent**
+
+:::
+
+::: danger OpenList ≥ 3.42.0
+OpenList Version ≥ 3.42.0 View [Allow all cloud disks to call other cloud disks' offline download tools](../../configuration/other.md)
+
+- ≥ 3.42.0 If you want to use offline download, you need to configure a temporary folder in the background before you can use it (otherwise it will only show **SimpleHttp**)
+- manage ==> settings ==> other ( **https://example.com/@manage/settings/other** )
+ - If you want to [use/configure] PikPak for offline downloading
+ 1. Mount PikPak storage
+ 2. Set Pikpak temp dir in the background
+ 3. Select any folder of this account as a temporary directory
+ - If multiple PikPaks are mounted and you want to use that account for offline downloading, then select the directory of that account as the temporary directory.
+
+**The following applies only to configuration instructions**
+
+:::
+
+### Aria2
+
+[**Click to view instructions for use**](../../configuration/other.md)
+
+### qBittorrent
+
+#### Docker Compose
+
+```yaml
+# docker-compose.yml
+services:
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ volumes:
+ - ./config/openlist:/opt/openlist/data
+ - ./temp/qBittorrent:/opt/openlist/data/temp/qBittorrent
+ ports:
+ - '5244:5244'
+ environment:
+ - PUID=0
+ - PGID=0
+ - UMASK=022
+ restart: unless-stopped
+ networks:
+ openlist:
+ aliases:
+ - openlist
+ qbittorrent:
+ image: lscr.io/linuxserver/qbittorrent:latest
+ container_name: qbittorrent
+ environment:
+ - PUID=0
+ - PGID=0
+ - WEBUI_PORT=8080
+ volumes:
+ - ./config/qbittorrent:/config
+ - ./temp/qBittorrent:/opt/openlist/data/temp/qBittorrent
+ ports:
+ - 8080:8080
+ restart: unless-stopped
+ networks:
+ openlist:
+ aliases:
+ - qbittorrent
+networks:
+ openlist:
+```
+
+#### Windows
+
+(Here we take the Windows side as an example, I don’t know if there is one on the Linux side)
+First of all, we need to configure the default values on the client side of **`qBittorrent`**
+According to [source code](https://github.com/alist-org/alist/blob/main/internal/bootstrap/data/setting.go#L159-L162), we know that the default values are admin:adminadmin@localhost:8080/
+
+- **ip**: localhost
+- **port**: 8080
+- **user**: admin
+- **password**: adminadmin
+
+1. We fill in the above parameters into the **`qBittorrent`** client, after configuration, we go to the OpenList front end to download offline (**method refer to the description at the beginning**)
+ - If you are prompted after submitting the offline link: **Qbittorrent not ready**, try restarting both OpenList and qBittorrent
+2. Default value configuration view address: (The link may also change position based on subsequent optimization)
+ - **https://github.com/OpenListGo/alist/blob/main/internal/offline_download/qbit/qbit.go#L28**
+ - `{ *** Value: "http://admin:adminadmin@localhost:8080/", Type: conf.TypeString, *** } `
+
+3. Use **`qBittorrent`** to offline `.torrent` type files
+ - Although you cannot directly add offline `.torrent` type files, you can save the country with a curve Reference: [View method](https://github.com/alist-org/alist/issues/2459#issuecomment-1354870010)
+
+4. You can configure it yourself not to delete after the download is complete, but to do seeding, the default is `0`, and it will be deleted immediately after uploading
+ - Modification location: **OpenList background** --> **Settings** --> **Qbittorrent seedtime** option, set the time you need to configure, the unit is `minute`, after the set seeding time is reached, it will automatically delete
+
+5. **We can also customize, instead of using the default presets**
+ - Modification location: **OpenList Manage** --> **Settings** --> **Qbittorrent url** option, just follow the modification
+ 
+
+#### Precautions
+
+1. Appeared in the background qBittorrent task: **`torrent parse timeout`**, parsing timed out
+2. The torrent can be parsed, but **`The system cannot find the path specified.`** appears when uploading.
+
+ The above two methods are most likely caused by the qBittorrent software itself, probably because of the green version and the modified version that have undergone some functional castration modifications. It is recommended to go to the official website to download and install it to restore it (the conclusion drawn by myself after stepping on the pit)
+ - **qBittorrent** official website: **https://www.qbittorrent.org/**
+ - **qBittorrent-Enhanced-Edition** GitHub: **https://github.com/c0re100/qBittorrent-Enhanced-Edition**
+
+3. Because the `v2.8.3` API is used, the minimum version of qBittorrent should be `4.4.0beta2` or `4.3.8` official version
+4. If **qBittorrent** sets the ip where alist is located to be exempt from authentication, you can directly omit the user name and password before `@` (configured on the **qBittorrent** client side)
+ - 3 and 4 are not mentioned in the video.
+ **qBittorrent** Video Tutorials
+
+
+
+ **If the video fails, you can watch it here: https://b23.tv/J34qDiG**
+
+### SimpleHttp
+
+Subsequent supplement
+
+### Transmission
+
+#### Docker Compose
+
+```yaml
+# docker-compose.yml
+version: '3'
+services:
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ volumes:
+ - ./config/openlist:/opt/openlist/data
+ - ./temp/transmission:/opt/openlist/data/temp/Transmission
+ ports:
+ - '5244:5244'
+ environment:
+ - PUID=0
+ - PGID=0
+ - UMASK=022
+ restart: unless-stopped
+ networks:
+ openlist:
+ aliases:
+ - openlist
+ transmission:
+ image: lscr.io/linuxserver/transmission:latest
+ container_name: transmission
+ environment:
+ - PUID=0
+ - PGID=0
+ - TZ=Etc/UTC
+ volumes:
+ - ./config/transmission:/config
+ - ./temp/transmission:/opt/openlist/data/temp/Transmission
+ ports:
+ - 9091:9091
+ restart: unless-stopped
+ networks:
+ openlist:
+ aliases:
+ - transmission
+networks:
+ openlist:
+```
+
+### 115 Cloud、PikPak、Thunder
+
+Versions v3.42.0 and above support calling the offline download function in OpenList
+
+After setting other configuration temporary directory options in the background, select the offline download option in the lower right corner of the front-end page to select the corresponding driver offline download function
+
+- Support:`magnet`, `http`, `ed2k` links
+ - PikPak: Also supports: X, TikTok, Facebook, TG URL links
+- Some tips for using 115 offline downloads:
+ 1. Out of sync problems may occur (manual refresh in the lower right corner )
+ 2. Currently, when the download is successful, completed tasks in the offline list are deleted.
+ 3. 115 Task URLs that are already in the offline list cannot be added again.
diff --git a/pages/en/guide/advanced/rapid_upload.md b/pages/en/guide/advanced/rapid_upload.md
new file mode 100644
index 000000000..74839e241
--- /dev/null
+++ b/pages/en/guide/advanced/rapid_upload.md
@@ -0,0 +1,45 @@
+---
+categories:
+ - guide
+ - advanced
+top: 130
+---
+
+# Rapid upload
+
+## Introduce
+
+**Rapid upload** means that files between two cloud disks can be uploaded to each other quickly without waiting. Here is an introduction to what can be mutually Rapid uploaded
+**There is a premise that the files required for Rapid upload in network disk A are already available in network disk B, so that Rapid upload can be performed, otherwise it will be uploaded normally**
+
+::: tip
+**The left side** is the source Network Disk、**The top side** is the target Network Disk
+:::
+
+| | Aliyun | 115 | Baidu(5) | 189 | Xunlei | PikPak | GoogleDrive | OneDrive | localhost |
+| :---------: | :----------------: | :----------------: | :-----------------: | :----------------: | :-------------: | :----------------: | :-------------: | :-------------: | :-------------: |
+| localhost | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| Aliyun | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 115 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| Baidu | :x: | :x: | :question: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 189 | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| Xunlei | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| PikPak | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| GoogleDrive | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| OneDrive | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :no_entry_sign: |
+
+1. The **Aliyun** mentioned here refers to [**aliyundriveOpen**](../../guide/drivers/aliyundrive_open.md)
+2. **OneDrive** has not been tested because there is no account. If the test is valid and there are no problems, feedback is welcome.
+3. **Aliyun** and **189**: Both need to turn on the Rapid upload option in the storage configuration, otherwise Rapid upload cannot be performed
+4. **GoogleDrive** files can be transferred to **189** in seconds and **189** can transfer files to **189** in seconds. There may be some problems and are not very stable. Need to pay attention to observation
+5. **Baidu Net Disk** can only be stored from local storage Rapid Upload to the net disk. If you use cross-storage to Copy Rapid Upload, you can only download the file first and then perform Rapid Upload.
+
+### How to use
+
+1. Right-click the file you want to transfer in the list, click Copy, and then select the folder to transfer to.
+2. If there are multiple files, you can select the entire folder or open the checkbox in the lower right corner to select multiple files, and then there is a row of buttons at the bottom to click to copy.
+
+
+
+
+
diff --git a/pages/en/guide/advanced/s3.md b/pages/en/guide/advanced/s3.md
new file mode 100644
index 000000000..bc7eb15ba
--- /dev/null
+++ b/pages/en/guide/advanced/s3.md
@@ -0,0 +1,57 @@
+---
+categories:
+ - guide
+ - advanced
+top: 40
+---
+
+# S3
+
+This function is to map OpenList as the S3 protocol. You can use the [S3 client](#s3-client-recommendation-fill-in-sample), just as OpenList can be mapped to WebDAV.
+
+- It can be the entire OpenList (root directory) or a separate folder
+
+## 1. How to use
+
+1.1 If it is for the first time, first open OpenList Manage to generate `S3 access key id` and `S3 secret access key` to save, then stop OpenList, open the configuration file to enable the `S3` service
+
+- If you update ID and secrets in the future, update and save, and then restart OpenList to take effect
+
+
+
+1.2 Open the [Configuration File](../../configuration/configuration.md#s3), change the `enable` field to` true` to enable S3 service
+
+```json{2}
+ "s3": {
+ "enable": true,
+ "port": 5246,
+ "ssl": false
+ }
+```
+
+1.3 After the first two steps are completed, Start OpenList, open the Manage `s3` configuration page, and choose to store a certain path as an object to store the barrel
+
+- On the left is the name of the storage bucket displayed outside, and the right is the existing list directory path of OpenList. If you want to map the entire root directory, you can choose the `root` path in the list
+ - There may be errors in manual filling. It is recommended to use the `Choose` button on the right side for selection
+ 
+
+## 2. Use instructions
+
+1. For ordinary object downloads, the transfer mode depends on the storage and proxy settings:
+ - If proxying is not required and the storage provides a direct download URL, OpenList may return an HTTP 302 redirect to the storage provider.
+ - If **Web Proxy** is enabled for the target storage, or another driver or proxy rule requires proxying, OpenList serves the response body through the local server.
+2. A direct redirect saves OpenList bandwidth, but the S3 client must follow a cross-host redirect and accept the provider URL's access requirements. Server relay uses OpenList bandwidth and is a safer starting point for clients that cannot use the direct provider redirect. For repository tools such as restic or rustic, enable **Web Proxy** unless direct mode has been verified.
+3. Currently only supports the use of client operations `List`, `get`, `put`, `del`, other operations are not supported yet
+4. Currently only supports the use of the `S3 Client` to operate, Mount S3 to the `OpenList Object Storage` temporarily unavailable
+
+## 3. S3 client recommendation/fill in sample
+
+### 3.1. S3 Browser
+
+S3 Browser:[https://s3browser.com](https://s3browser.com/download.aspx)
+
+
+
+### 3.2. S3Drive
+
+
diff --git a/pages/en/guide/advanced/search.md b/pages/en/guide/advanced/search.md
new file mode 100644
index 000000000..b94d4cebb
--- /dev/null
+++ b/pages/en/guide/advanced/search.md
@@ -0,0 +1,236 @@
+---
+categories:
+ - guide
+ - advanced
+top: 100
+---
+
+# Search
+
+### how to use
+
+::: danger Follow the steps below to enable search:
+
+1. Go to the `indexes` page to select a **Search index** and click `Save`.
+2. After the index is saved, click `Build indexes` to build the index.
+3. Now you can search for files by click the search block on the top right corner of the page or by using the shortcut `Ctrl + K`.
+
+:exclamation: If you do not follow the above prompts, the prompt will be opened: **Search Not available**
+:::
+
+## Difference between different search indexes
+
+- `database`: Search by database, which is using the existing data.db. It will create a new table, record the parent directory, name, and size of every object, but the search does not split words which means that match whether the keywords you enter appear in the name of object. In general, if you don't have a specific search requirement, we recommend you choose it.
+
+- `database (non-full-text search)`: The full-text search mode is used above, but full-text search will have some strange problems when using **MySQL database** as an OpenList database, which has not been resolved yet, so if your OpenList database Change to **MySQL**, and your OpenList version **`≥3.9.1`** It is recommended that you use this to build an index, although it is slower than full-text search and the gap is not very big, but it will not search for strange files , it’s more secure. After the future version is repaired, we will inform you to use the new full-text search to build the index. If you are using **sqlite3**, you can use whichever you like.
+
+- `bleve`: An open source full-text search engine. It will split the words in the name of object and search for the keywords you enter. But its search results may be so strange that you can't get the results you want, and it will take up more resources.
+
+- **sqlite3** is easy to trigger `database is locked` lock library cannot write files
+ - Solution to `database is locked`:
+ - It's because the database is building the index. If you are still in the building process, please wait patiently.
+ - If the index has been completed, it is caused by turning on [Automatically update the index](#automatically-update-the-index). Please turn off [Automatically update the index](#automatically-update-the-index). If the problem still occurs, please close and restart OpenList.
+ - Or switch the database to MySQL
+
+- `meilisearch`: A feature-rich, multilingual, blazing-fast search engine written in Rust. More accurate compared to `bleve`.
+ Requires [self-hosting](https://www.meilisearch.com/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch) or using a cloud service.
+ `OpenList` uses "http://localhost:7700" as the default meilisearch host,
+ if you host `meilisearch` and `OpenList` together locally with `meilisearch` authentication disabled, `OpenList` will automatically connect it,
+ otherwise you need to modify the **meilisearch** field in the configuration file (host, index UID, API key).
+ When `meilisearch` instance is protected by `api key`, the minimal actions of `api key` required by `OpenList` are `["search","indexes.get","settings.*","documents.*","tasks.*"]`.
+ Storage Space Usage: ~800MiB per 100,000 files (including folders), which may be larger or smaller depending on filename length and folder depth. Please note that the storage space occupied by `meilisearch` will increase as files are continuously added/updated, and space will not be released even if you delete some or all documents from the index, unless you create a refresh instance. Generally, you don't need to worry too much about this situation, as the storage space usage will stabilize at a certain value with use, and will only have a significant impact on space usage when large numbers of files are added.
+ - Download:https://github.com/meilisearch/meilisearch/releases
+ - `meilisearch` Docs:https://www.meilisearch.com/docs/
+ - Reference:https://github.com/AlistGo/alist/discussions/6830
+
+The following table could help you understand the difference between these search indexes quickly:
+
+| | database(full text search) | Database (non-full-text search) | bleve | meilisearch |
+| ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | ----------- | ----------------------------------------- |
+| Search results | Can't search in Chinese | More accurate than full-text search, you can search Chinese | Fuzzy match | Support CJK tokenizers & Chinese variants |
+| Search speed | Fast,see above for advantages and disadvantages | Slower than full-text search, see above for advantages and disadvantages | Fast | Blazing fast |
+| Specify folder search | Yes | Yes | No | Yes |
+| Disk usage | Low | Low | High | High |
+| Auto incremental update | Yes | Yes | No | Yes |
+
+::: warning
+If you are using _MySQL_ as the database, it is recommended to use **`non-full-text search`** (strongly recommended)
+
+**`Non-full-text search`** Although it is not as fast as full-text search, it is not much slower. If you insist on using full-text search, you may have to sacrifice the inability to search Chinese
+
+If you use sqlite as the database, there is no full-text search, you can choose any database~
+
+Full-text search: It will not search in the text of all files, don't get it wrong.
+:::
+
+### Deploy MeiliSearch for indexing using Docker Compose
+
+#### Deploy MeiliSearch using Docker Compose
+
+Feeling confused?
+
+Here's a Compose example to add `meilisearch` to your Openlist Compose. Follow the steps to set up indexing with `meilisearch`.
+
+```yaml
+version: '3.3'
+services:
+ openlist:
+ image: 'openlistteam/openlist:beta-aio'
+ container_name: openlist
+ volumes:
+ - '/tmp/data/Docker/OpenList:/opt/openlist/data'
+ ports:
+ - '5244:5244'
+ environment:
+ - UMASK=022
+ networks:
+ - openlist
+ restart: unless-stopped
+
+ meilisearch:
+ image: getmeili/meilisearch:v1.16
+ container_name: meilisearch
+ ports:
+ - '7700:7700'
+ volumes:
+ - /tmp/data/Docker/meilisearch/meili_data:/meili_data
+ command: meilisearch --schedule-snapshot --snapshot-dir /meili_data/snapshots
+ environment:
+ - MEILI_MASTER_KEY=your_master_key_here
+ tty: true
+ stdin_open: true
+ networks:
+ - openlist
+ restart: unless-stopped
+
+networks:
+ openlist:
+ driver: bridge
+```
+
+Configuration Explanation:
+
+- `UMASK`: Sets file permissions
+- `getmeili/meilisearch:v1.16`: Official recommendation to use a fixed version number (latest version at time of writing is `v1.16`). You may check the latest version yourself via the [official local deployment docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally).
+- Additional parameters for meilisearch can be modified via the [official local deployment docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally) or deployed using alternative methods.
+
+::: warning
+The `/tmp/data/Docker` directory here is merely an example; please store your data in an appropriate location.
+
+Additionally, the `MEILI_MASTER_KEY` here should be replaced with a key you generate yourself. You should substitute it with any alphanumeric string of 16 bytes or more. In most cases, one character corresponds to one byte.
+
+PS: This provides only a basic example. Please modify it according to your needs and add other configurations as required.
+:::
+
+#### Setting up meilisearch in openlist
+
+How to configure MeiliSearch in OpenList
+
+First, you need to modify config.json. In this example, it should be located at `/tmp/data/Docker/OpenList/config.json`.
+
+Edit the section below, filling in the IP address and port of your MeiliSearch instance, along with the key you set in `MEILI_MASTER_KEY`.
+
+```json
+ "meilisearch": {
+ "host": "http://meilisearch:7700",
+ "api_key": "your_master_key_here",
+ "index": "openlist"
+ },
+```
+
+Next, open the management panel, click `Indexes`, select `meilisearch`, and click `Refresh` to rebuild the index.
+
+{width=600px}
+
+## Search tips
+
+- If you want to search for a specific folder, you must choose `database` as the search index;
+- If you choose `database` as the search index and the type of your database is `sqlite3`, we suggest that you don't make any changes in the admin page while building the index, as sqlite3 does not support concurrent writes and can cause `database-lock` issues;
+- If you choose `bleve` as the search index, and if you want to search for new files or if you don't want to search for deleted files, the index needs to be completely rebuilt to take effect because `bleve` does not support incremental updates;
+- But for `database`, it supports incremental updates, so you can search for new files or deleted files just by access the modified folder (and click `refresh` icon if cached) without rebuilding the index, which is much more convenient than `bleve`.
+
+### Ignore paths
+
+Paths to be skipped during index building, one path per line, multiple lines can be filled
+
+- Example:
+ - `/aaa network disk`
+ - `/bbb network disk/ccc folder`
+
+If you don't want to configure this, you can turn on the `disable index` option in each driver
+
+## Update index
+
+- (formerly: the path to update the index)
+ After building all the indexes, or a file has a large number of file updates, but it is inconvenient to rebuild, you can use this to update the index
+- Example: - /aaa network disk - /bbb network disk/ccc folder
+
+### Automatically update the index
+
+:warning: **`The default is off, and the index will not be built automatically`**.
+
+For example, you have already built the index, but added a **network disk mount** or **folder update** later.
+
+But you have already built a lot of indexes. According to the previous words, there are two methods.
+
+1. Go in folder by folder before building
+
+2. Or it is cumbersome to refactor all
+
+ But this time, just turn on the **`Automatically build index`** button and enter the **Newly mounted network disk** or **Updated folder**, the indexed files in this directory and The folder automatically builds the index without entering a folder by folder to let him build it automatically
+
+- Advantages: Don't worry, all the indexes in this folder can be automatically built if there is an update into the root directory of the updated folder
+- Cons: always on call ready to build
+
+---
+
+Someone will find out that [**Path to update index**](#Path to update index) can also be updated? Can be updated but the two do not conflict.
+
+- [**Automatically update index**](#automatically-update-the-index): suitable for users who build indexes for all files
+- [**Update Index**](#update-index): Suitable for **not** to build indexes for all files, but there are files that need to be built, manually build indexes to avoid all being indexed
+
+### Maximum index depth
+
+default 20.
+The one shown outside is built manually, and the update index option selects the depth in the update index button.
+Explanation: The directory can enter up to several layers. For example, if you have a folder with a depth of 30 layers, set it to 20, and only build the first 20 layers, and the remaining 10 layers will not be built.
+
+## :warning: Precautions for use
+
+- OpenList **V2** and **v3** types of mounts cannot be built by default
+- If you are using **MySQL** as the database, it is recommended that you use **database (non-full-text search)**, [**Click to view details to see the second item**](#difference-between-different-search-indexes)
+- In the future version (**≥3.9.0 version**), V3 users can choose whether to allow others to mount your network disk and then index it :no_entry:**`Use with caution`**:no_entry:
+ - View details: [allow-indexing](/en/configuration/site#allow-indexing)
+ - Don't ask why V2 is not supported, because the V2 version is no longer maintained, so there is no follow-up
+- Why not directly open V2 V3 index construction: **https://github.com/alist-org/alist/discussions/2529**
+- After building an index, users without permissions can search for hidden file/folder solutions [click to view](meta.md#tips)
+
+## The database file is very large, what should I do if it is still the same after clearing the index?
+
+Normal users do not modify the database options. They use the `sqlite` database to build indexes, which will cause the database file to be particularly large
+
+- Data files, `Data` folders in the same directory in OpenList program,`data.db,data.db-shm,data.db-wal`
+
+After turning on the constructive index, the more the number you build, the larger the files. Finally, you accidentally occupy the machine's hard disk, and then click the clear index button. What should I do if the file is still as big?
+
+- This is caused by the cache of `sqlite`, there are two solutions:
+ 1. We use commands or tools to connect to `sqlite` database, input:**`VACUUM;`**
+
+ ```sql
+ VACUUM;
+ ```
+
+ 2. After using the command to clean up, we replace it with `mysql` database before constructing indexes
+ - Sqlite replaced with mysql database tutorial:**[BV1iV4y1T7kh](https://www.bilibili.com/video/BV1iV4y1T7kh)**
+
+ Comparison after cleaning the command: The picture above shows before cleaning up, and the following figure shows that after cleaning, you can execute several commands several times if there is no effect.
+
+ 
+
+---
+
+`data.db, data.db-shm, data.db-wal` when backup, when backup,`data.db-shm,data.db-wal` Do these two files need backup?
+
+- In the backup, stop the program first, and then backup. You only need to backup the `data.db` database file. The other two do not need to backup
+
+- It may be after you stop the program`data.db-shm,data.db-wal`will automatically disappear, don't worry
diff --git a/pages/en/guide/advanced/sso.md b/pages/en/guide/advanced/sso.md
new file mode 100644
index 000000000..3ff88c5c5
--- /dev/null
+++ b/pages/en/guide/advanced/sso.md
@@ -0,0 +1,164 @@
+---
+categories:
+ - guide
+ - advanced
+top: 60
+---
+
+# Third-party single sign-on
+
+## 1. Single sign-on client id
+
+client ID.
+
+## 2. Single sign-on client secrets
+
+client secrets.
+::: warning matters needing attention
+
+1. Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
+2. Only one of the four types of single sign-on can be enabled temporarily. If you used other single sign-on methods before and then changed to a new single Unbind (just one click) and then bind the single sign-on method you want to use now.
+3. If you use **`GitHub,Microsoft,Google,DingTalk`**, you only need to fill in the client ID and secret key, and select the corresponding platform in the options.
+ - If you use **`Casdoor`** the following parameters need to be filled in, just follow the tutorial to fill in
+
+:::
+
+## 3. Registration binding single sign-on
+
+##
+
+##
+
+##
+
+##
+
+##
+
+##
+
+##
+
+## 4. SSO automatically registers as an OpenList account
+
+- **OpenList Version > **v3.22.1** New Features**
+ Before using single sign-on to register as an OpenList account, we need to bind the single sign-on of OpenList first, the binding method is explained above
+- Supports the `five` single sign-on methods mentioned above
+- Do not use the default organization (**app-built-in**) directly, because all users in this organization are global administrator accounts
+- Except `CASDOOR`, you only need to fill in the` Client id` and the `Client secrets`and the newly added single login account registered as OpenList account configuration
+
+### 4.1. SSO Full Fill Demo
+
+Please refer to the detailed description below for how to fill in, the schematic diagram is just a reference for filling in and not suitable for everyone’s user habits
+
+
+
+### 4.2. SSO auto register
+
+If we want SSO single sign-on to be registered as an OpenList account, we need to enable this option before it can be used
+
+### 4.3. SSO default dir
+
+That is to say, the default path used by the registered account is equivalent to the `Base path` in the OpenList user settings.
+
+It can be the root directory `/`, or the path `/path/test/Demo` specified by the user
+
+
+
+### 4.4. SSO default permission
+
+It is equivalent to which permissions are enabled by default for registered users, as shown below
+
+
+
+
+
+The default is 0, no permission is enabled
+
+If we need to enable some permissions during registration, we only need the sum of the numbers of different permissions.
+
+For example:
+
+1. We need to open the user's `WebDav reading` and `WebDav manage ` by default, that is 256+512=768, we just fill in `768` in the options
+2. If we need to open the three permissions of `Make dir or upload`, `Rename` and `Delete` by default when registering, then it is 8+16+128=152, we can fill in `152` in the background
+ I won’t say much about the examples, just add the permissions you need
+
+### 4.5. Precautions and instructions
+
+**4.1-There is already this user in the OpenList user database**
+
+| username | password | base\*path | role | permission | opt_secret | github_id | disabled | sso_id |
+| ------------------ | -------- | ---------- | ---- | ---------- | ---------- | --------- | -------- | ----------- |
+| anyi | FzdDfkmU | /test1 | 0 | 3 | | | 0 | |
+| anyi**\*dc188911** | RUCtgqCw | /test1 | 0 | 3 | | | 0 | **dc18891** |
+
+As shown in the above table, a string of redundant ids is added after the newly registered single sign-on user name
+
+This is because the same user already exists in the OpenList user database, so the sso_id is also added after the user name
+
+If your newly registered single sign-on user name does not exist in the OpenList user database, it will not add the sso_id after the name
+
+**4.2-What should I do if I don’t want the SSO account to be registered as an OpenList account?**
+
+Just turn `SSO auto register` off,This will not affect the use of accounts that have been registered using Sso
+
+**4.3-If I turn off the single sign-on option, what should I do with the account registered with Sso?**
+
+Don't worry, after using single sign-on to register and log in to OpenList, log in in the background, and find `personal information` after logging in
+
+- You can modify **`username`** and **`password`** by yourself, save it after modification, so that you can log in with the OpenList account normally
+- At this time, you can click `Unbind Single Sign-On Platform`, you can unbind or not unbind, and the subsequent [**default path**](#sso-default-dir) and [**default permissions**](#sso-default-permission) of this user can only be modified by the administrator in the OpenList background user
+
+**4.4-Why is this error code displayed when using sso?**
+
+```json{3}
+{
+ "code": 400,
+ "message": "The single sign on platform is not bound to any users: record not found",
+ "data": null
+}
+```
+
+This is because [Single Sign-On Automatic Registration](#sso-auto-register) is not enabled for the OpenList account, and the single sign-on cannot be registered as an OpenList account
+
+- If you are an administrator, you can turn it on
+
+- If you are a user, you can contact the administrator to enable
+
+## 5. Sso compatibility mode
+
+OpenList single -point login is bound to Dingtalk, and then opens OpenList in the **`Dingtalk`** application, When you log in, choose Dingtalk login and jump to your computer browser. After authorization, you find that there is no response, because the browser cannot jump to the Dingtalk application inner browser page
+
+At this time, you need to open the **`sso compatability mode`** again to click on the login to log in successfully
+
+**OpenList applied in Dingtalk and opened as shown in the figure:**
+
+
+
+## 6. How to create the application in Dingtalk workbench
+
+A picture teaches you to create a new application and add it
+
+- LOGO is not modified when the newly -built newly built, you can wait for the newly built and then modify See_Figure_2
+- If you just browse OpenList in the Dingtalk application, you do n’t need a single -point login management, you do n’t need to set up a single -point login configuration, you can just add an application
+ 
+
+### 6.1. Modify the application logo
+
+Open [**DingTalk open platform management**](https://open-dev.dingtalk.com/fe/app#/corp/app) Find your newly built app to modify the logo.
+
+
+
+## 7. redirect url
+
+After turning on **`Sso compatibility mode`** Then you need to log in to the corresponding software to modify the redirect url to change it to the two redirect url below
+
+- `GitHub` only needs to add one:`http(s)://You_Url/api/auth/sso_get_token`
+- `Microsoft` and` Google` both need to be added, you can add multiple Redirect urls, so you only need to add two Redirect URLs.
+
+```
+http(s)://You_Url/api/auth/get_sso_id
+http(s)://You_Url/api/auth/sso_get_token
+```
+
+If you enable the **Sso compatibility mode** if you do not modify it, you will prompt `Invalid Redirect URL` Error
diff --git a/pages/en/guide/advanced/sso/01-GitHub.md b/pages/en/guide/advanced/sso/01-GitHub.md
new file mode 100644
index 000000000..a9506f397
--- /dev/null
+++ b/pages/en/guide/advanced/sso/01-GitHub.md
@@ -0,0 +1,30 @@
+### 3.1. Github
+
+::: warning
+If you want to use GitHub to log in, you first need the machine you built OpenList to be able to connect to GitHub before you can call and use it, otherwise you cannot use it if the link is not connected
+:::
+
+Open **https://github.com/settings/developers** Click **`New OAuth App`**
+
+#### 3.1.1. Register OAuth Instructions
+
+- Application name
+ - Write whatever you want to call it
+- **Homepage URL**
+ - home URL address
+ - Both **http** and **https** can be used
+- Application description
+ - write whatever you want
+- **Authorization callback URL**
+ - Callback URL address
+ - **https://your_domain/api/auth/sso_callback** - Both **http** and **https** can be used
+ Remember to get **Client secrets** after filling it out, and then fill it in the OpenList background.
+ Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
+
+#### 3.1.2. Completely fill in the reference schematic
+
+
+
+#### 3.1.3. GitHub login Video Tutorials
+
+
diff --git a/pages/en/guide/advanced/sso/02-Dingtalk.md b/pages/en/guide/advanced/sso/02-Dingtalk.md
new file mode 100644
index 000000000..01f038e34
--- /dev/null
+++ b/pages/en/guide/advanced/sso/02-Dingtalk.md
@@ -0,0 +1,24 @@
+### 3.2.Dingtalk
+
+First open **https://open-dev.dingtalk.com/fe/app#/corp/app**
+
+In the upper right corner, first select `New Application`, select `H5 Micro Application` as the type, fill in the content by yourself and click Confirm to create
+
+Click on the new application and we will see the application credentials option, where `AppKey` is the client ID, and `AppSecret` is the client secret key
+
+- Just fill in the corresponding parameters in the OpenList background single sign-on
+ Go to the left column and find `Login and Share` \*\*Fill in the callback parameters `http://127.0.0.1:5234/api/auth/sso_callback`
+
+```bash title="Callback" parameter example
+http://127.0.0.1:5244/api/auth/sso_callback
+```
+
+- Note: I used the callback parameter here for local testing. http://127.x When you use it, Write **http(s):\//your own domain name/api/auth/sso_callback** when filling in and using it by yourself
+
+ Write the callback parameters well. Let’s go to the left column and find `Privilege Management`, find **`Personal Information Read Permission of Address Book`** and click to authorize
+
+ Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
+
+#### 3.2.1. Completely fill in the reference schematic
+
+
diff --git a/pages/en/guide/advanced/sso/03-Microsoft.md b/pages/en/guide/advanced/sso/03-Microsoft.md
new file mode 100644
index 000000000..6710a8c60
--- /dev/null
+++ b/pages/en/guide/advanced/sso/03-Microsoft.md
@@ -0,0 +1,33 @@
+### 3.3. Microsoft
+
+First open **https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade**
+
+Then register to create an application, I won't say much here, you can see the complete schematic diagram
+
+Account type must be selected: **Account in any organizational directory (any Azure AD directory - multi-tenant)**
+
+Microsoft callback parameters: must start with "HTTPS" or "http://localhost (I used localhost here for local testing)
+
+```bash title="Callback" parameter example
+http://localhost:5244/api/auth/sso_callback?method=sso_get_token
+http://localhost:5244/api/auth/sso_callback?method=get_sso_id
+```
+
+- Write **http(s):\//your own domain name/api/auth/sso_callback?method=sso_get_token** when filling in and using it by yourself
+
+- Write **http(s):\//your own domain name/api/auth/sso_callback?method=get_sso_id** when filling in and using it by yourself
+
+- Note: When adding a redirect URL to a new application, only one can be added. After the application is registered and registered, click on the application to see the options behind the redirect URI
+
+ After filling it out, we click `Certificate and Password` on the left column to create a new `Client Password` to get our client secret key
+
+- After the client password is created, the **`value`** parameter is our `client key`, remember to save it, it will not appear again if it appears once, if you don’t save it in time, just create a new client password
+
+ The client ID is in `Overview` at the top of the left column, find the application (client) ID, which is the client ID we need to fill in the OpenList
+
+- We have got the client ID and secret key and fill them in the OpenList single sign-on configuration.
+ Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
+
+#### 3.3.1. Completely fill in the reference schematic
+
+
diff --git a/pages/en/guide/advanced/sso/04-Google.md b/pages/en/guide/advanced/sso/04-Google.md
new file mode 100644
index 000000000..0e5cb6649
--- /dev/null
+++ b/pages/en/guide/advanced/sso/04-Google.md
@@ -0,0 +1,36 @@
+### 3.4. Google
+
+::: warning
+If you want to use Google to log in, you first need the machine you built OpenList to be able to connect to Google before you can call and use it, otherwise you cannot use it if the link is not connected
+:::
+
+1. First open **https://console.cloud.google.com/projectselector2/apis/dashboard?hl=zh-cn**
+2. If you are using it for the first time, you need to create a new project first (just write whatever you want, skip it if it has already been created)
+3. Then configure the [consent screen](#agree-to-screen-configuration) (there is a separate instruction on how to configure the document, if it is already configured, skip it)
+4. After configuring the unified screen, we click the credentials on the left, create credentials, and select OAuth client ID
+
+- Application Type Select Web Application, and write the name as you like
+- Then add our two callback parameters in the authorized redirect URI
+
+```bash title="Callback" parameter example
+http://127.0.0.1:5244/api/auth/sso_callback?method=get_sso_id
+http://127.0.0.1:5244/api/auth/sso_callback?method=sso_get_token
+```
+
+- Write **http(s):\//your own domain name/api/auth/sso_callback?method=get_sso_id** when filling in and using it by yourself
+- Write **http(s):\//your own domain name/api/auth/sso_callback?method=sso_get_token** when filling in and using it by yourself
+ After filling it out, click Create to get the OAuth client ID and secret key
+- (It doesn't matter if you accidentally close it here, just click on the name of the application we created and enter it in the upper right position to see it)
+ We have got the client ID and secret key and fill them in the OpenList single sign-on configuration.
+ Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
+
+#### 3.4.1. Agree to screen configuration
+
+If it has been configured, just ignore this picture (you can zoom in if you can’t see it clearly)
+
+
+
+
+#### 3.4.2. Completely fill in the reference schematic
+
+
diff --git a/pages/en/guide/advanced/sso/05-Casdoor.md b/pages/en/guide/advanced/sso/05-Casdoor.md
new file mode 100644
index 000000000..faaff2c78
--- /dev/null
+++ b/pages/en/guide/advanced/sso/05-Casdoor.md
@@ -0,0 +1,33 @@
+### 3.5. Casdoor
+
+What is `Casdoor`? Yes, you can use other OAuth applications to log in. [**Self-deployment**](https://casdoor.org/docs/basic/server-installation) is open source and free, and official hosting requires payment.
+
+Now, Casdoor supports many OAuth application providers, as many as dozens of kinds, you have seen and not seen
+
+**GitHub open source link: https://github.com/casdoor/casdoor**
+
+After we enter `Casdoor`, we first create **Organization**1, **Token**2, **Application**3, **User**4
+
+Do not use the default organization (**app-built-in**) directly, because all users in this organization are global administrator accounts
+
+Then fill in the `OpenList` backstage single sign-on option one by one. The user’s parameters are ignored for the time being. They are filled in when the personal data is bound to the single sign-on.
+
+
+
+After filling in the above parameters, we come to the personal data and click `Bind point single sign-on platform` to bind
+
+Then the `Casdoor` window will pop up, we can enter our registered user name
+
+
+
+#### 3.5.1. Access some other vendors on Casdoor
+
+In addition to the four that `OpenList` has already connected to `GitHub Dingding Google Microsoft`, it is also connected to `QQ Baidu Feishu WeChat/Enterprise WeChat Douyin Bilibili` and so on, all [**click Check out all the manufacturers that can be accessed here**](https://casdoor.org/docs/provider/oauth/overview), of course, the four that `OpenList` has already accessed can also be added to `Casdoor`
+
+**View detailed tutorials on accessing other providers: [https://anwen-anyi.github.io/index/09-ssologin.html](https://anwen-anyi.github.io/index/09-ssologin.html)**
+
+::: details Direct iframe viewing
+
+
+
+:::
diff --git a/pages/en/guide/advanced/sso/06-Authentik.md b/pages/en/guide/advanced/sso/06-Authentik.md
new file mode 100644
index 000000000..502c82d67
--- /dev/null
+++ b/pages/en/guide/advanced/sso/06-Authentik.md
@@ -0,0 +1,49 @@
+### 3.6. Authentik
+
+#### 3.6.1. Authentik Setup
+
+**Create a Provider for OpenList**
+
+1. Menu -> Applications -> Providers -> Create
+2. Select `OAuth2/OpenID Provider` and click next
+3. Enter an application name, this guide assumes you will call the provider `OpenList`
+4. Select your authorization flow. The built-in `default-provider-authorization-implicit-consent` is acceptable
+5. Make note of the `Client ID` and `Client Secret` fields as provided by Authentik - save these values for later
+6. For Redirect UDIs/Origins, enter the following, replacing [your.openlist.domain] with the FQDN for your OpenList installation:
+
+```bash title="Callback" parameters
+https://your.openlist.domain/api/auth/sso_callback\?method=sso_get_token
+https://your.openlist.domain/api/auth/sso_callback\?method=get_sso_id
+```
+
+ Please note the \ character before ? as an escape character for the regex used for this URI is mandatory.
+
+7. Make note of the signing key selected as you will need it later. This guide assumes you will use the default `authentik Self-signed Certificate` 8. Save the new provider
+
+**Create an Application for OpenList**
+
+1. Menu -> Applications -> Application -> Create
+2. Enter an application name, recommended `OpenList`
+3. An application slug of `openlist` will be automatically selected for you. This guide assumes you will keep this value
+4. Select the provider by name you selected in Provider Setup step 3 - `OpenList`
+5. Save the new application
+
+**Retrieve the JWT certificate**
+
+1. Menu -> System -> Certificates
+2. Select the `>` next to the `authentik Self-signed Certificate`. If you chose another certificate for the application, select that certificate instead
+3. Click Download Certificate to get a copy of the public JWT key
+
+#### 3.6.2. OpenList Setup
+
+- **Sso login enabled:** `yes`
+- **Sso login platform:** `OIDC`
+- **Sso client id:** [Client ID from Authentik]
+- **Sso client secret:** [Client Secret from Authentik]
+- **Sso oidc username key:** `preferred_username`
+- **Sso organization name:** `user`
+- **Sso application name:** `user`
+- **Sso endpoint name:** `https://your.authentik.domain/application/o/openlist/`
+ - **Note:** Replace [your.authentik.domain] with the FQDN for your Authentik installation. Mind the trailing `/` at the end of the path. If you chose a different application slug in Authentik Application setup 3, substitute that here
+- **Sso jwt public key:** Open the certificate file downloaded in step 3.3 of the Authentik Application setup and paste the contents here. It will start with `-----BEGIN CERTIFICATE-----`
+- **Sso compatability mode:** `no`
diff --git a/pages/en/guide/advanced/sso/07-keycloak.md b/pages/en/guide/advanced/sso/07-keycloak.md
new file mode 100644
index 000000000..0aeab5e7c
--- /dev/null
+++ b/pages/en/guide/advanced/sso/07-keycloak.md
@@ -0,0 +1,90 @@
+### 3.7. Keycloak
+
+Keycloak is integrated via the OIDC (OpenID Connect) protocol and can serve as an identity provider for OpenList. The steps below explain how to configure Keycloak for OpenList SSO.
+
+#### 3.7.1. Keycloak Setup
+
+##### 3.7.1.1. Create Realm
+
+- Log in to the Keycloak admin console.
+- Click `Manage realms` in the left navigation bar, select `Create Realm` to create a new realm or use an existing one.
+
+##### 3.7.1.2. Create Client
+
+After selecting the realm, click `Clients` → `Create Client`.
+
+- **General settings**
+ 
+
+ ::: details see the details
+
+ | Name | Value |
+ | -------------------- | --------------------------------- |
+ | Client type | OpenID Connect |
+ | Client ID | OpenList (or any name you prefer) |
+ | Name | OpenList (or any name you prefer) |
+ | Description | optional |
+ | Always display in UI | select as needed |
+
+ :::
+
+- **Capability config**
+ 
+
+ ::: details see the details
+
+ | Name | Value |
+ | ------------------------- | ---------------------------------------- |
+ | Client authentication | On |
+ | Authorization | Off |
+ | Authentication flow | `Standard Flow`,`Service account roles` |
+ | PKCE Method | Leave blank |
+ | Require DPoP bound tokens | Off |
+
+ :::
+
+- **Login settings**
+ 
+
+ ::: details see the details
+
+ | Name | Value |
+ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | Root URL | Leave blank |
+ | Home URL | Enter your OpenList access address, e.g.: https://your.openlist.domain |
+ | Valid redirect URIs | `https://your.openlist.domain/api/auth/sso_callback?method=get_sso_id` `https://your.openlist.domain/api/auth/sso_callback?method=sso_get_token` `https://your.openlist.domain/api/auth/sso_get_token` `https://your.openlist.domain/api/auth/get_sso_id` |
+ | Valid post logout redirect URIs | Leave blank |
+ | Web origins | Leave blank |
+
+ :::
+
+##### 3.7.1.3. Retrieve JWT public key
+
+- In the left menu, find `Clients`, select the newly created Client to enter the settings page.
+- In the Client settings page, switch to the `Keys` tab.
+- Copy the content in the `Public Key` field for later use in OpenList configuration.
+- If the public key is not visible, click `Generate RSA Keys` to generate it.
+
+##### 3.7.1.4. Retrieve Client Secret
+
+- In the Client settings page, switch to the `Credentials` tab.
+- Copy the content in the `Client Secret` field for later use in OpenList configuration.
+
+#### 3.7.2. OpenList Setup
+
+Fill in the following parameters in OpenList's SSO configuration:
+
+- **SSO login enabled:** `yes`
+- **SSO login platform:** `OIDC`
+- **SSO client id:** Keycloak Client ID (from [Create Client](#_3-7-1-2-create-client) above)
+- **SSO client secret:** Keycloak Client Secret (from [Retrieve Client Secret](#_3-7-1-4-retrieve-client-secret) above)
+- **SSO oidc username key:** `preferred_username` or as per your Mapper settings
+- **SSO organization name:** `master` (from [Create Realm](#_3-7-1-1-create-realm) above)
+- **SSO application name:** `OpenList` (from [Create Client](#_3-7-1-2-create-client) above)
+- **SSO endpoint name:** `https://your.keycloak.domain/realms/{realm-name}` (where realm-name matches the organization name)
+- **SSO jwt public key:** from [Retrieve JWT public key](#_3-7-1-3-retrieve-jwt-public-key) above
+- **SSO auto register as OpenList account:** Enable as needed
+- **SSO compatibility mode:** `no` (enable if compatibility is required)
+
+Adjust claims and endpoints based on your specific Keycloak deployment if needed.
+For detailed operations, refer to the [Keycloak official OIDC documentation](https://www.keycloak.org/documentation).
diff --git a/pages/en/guide/advanced/strm.md b/pages/en/guide/advanced/strm.md
new file mode 100644
index 000000000..b8407c602
--- /dev/null
+++ b/pages/en/guide/advanced/strm.md
@@ -0,0 +1,10 @@
+---
+categories:
+ - guide
+ - advanced
+top: 10
+---
+
+# Generate Strm
+
+
diff --git a/pages/en/guide/advanced/user.md b/pages/en/guide/advanced/user.md
new file mode 100644
index 000000000..e3f30e88c
--- /dev/null
+++ b/pages/en/guide/advanced/user.md
@@ -0,0 +1,75 @@
+---
+categories:
+ - guide
+ - advanced
+top: 140
+---
+
+# User
+
+## Add user
+
+::: warning Security Notice
+Adding a user may expose files and server-side capabilities to another account. Use a strong, unique password, grant only the minimum required permissions, and create accounts only for trusted users. Security incidents resulting from improper user or permission management are the administrator's responsibility.
+:::
+
+## Username
+
+Username for login.
+
+## Password
+
+Password for login.
+:::tip
+Password is invalid for guest user.
+
+If you enter an incorrect password 6 times in a row, the current IP will be blocked for 30 minutes and you will not be able to enter your account and password to log in. However, it will not affect other IPs. It will only target IPs that entered 6 incorrect passwords.
+
+- Restarting will immediately remove the 30-minute ban time
+
+:::
+
+## Base path
+
+The root path that users see when he/she log in.
+
+Q: **How to allow a user to see multiple folder paths?**
+
+A: You can create a new [alias](alias.md) storage, add all the paths you need to show the user to the alias, and then point to the newly created alias storage in the user path
+
+## Permission
+
+- Can see hides: Can see the hides files and folders
+- Access without password: Can access without password
+- Add offline download tasks: Add offline download tasks
+ - ⚠️ Granting a user remote file read/write permissions also grants them the ability to access resources from the server's network context, including internal network addresses. Only grant this permission to fully trusted users. Internal network access resulting from improper permission assignment is not considered a security vulnerability.
+- Mkdir or upload: Can make directory or upload files
+- Rename: Can rename files and folders
+- Move: Can move files and folders
+- Copy: Can copy files and folders
+- Delete: Can delete files and folders
+- Webdav read: Can read files and folders with webdav
+- Webdav manage: Can manage files and folders with webdav
+- FTP read: Can read files and folders with FTP
+- FTP manage: Can manage files and folders with FTP
+- Read archives: Read the contents of the file in the compressed package
+ - After turning on this option, compressed package format files will be previewed by default (as shown in the figure below), which will consume some server traffic, but will not download them all.
+ - If you want to turn off the preferred preview of the compressed format, **Manage => Setting => Preview by default when opening archives**, this option is turned off, and the preference is the download mode
+- Decompress: Decompress compressed package files online
+ 
+ 
+
+## Disabled
+
+After checking, this user will stop using it and cannot log in. The guest account is disabled by default. If you want to enable the guest account, please close it manually.
+
+## Tips
+
+1. Are you worried that visitors can see all files? [**Click to see how to set it up here**](../../faq/why.md#how-do-i-set-it-so-that-visitors-can-only-see-the-content-after-logging-in)
+2. **`Guest user is disabled, login please`**: In order to protect your OpenList security, the guest access permission is closed, if you need guest access, open it yourself
+ - OpenList Manage --> users --> `guest` --> **Disable** uncheck
+3. Question about **`Copy/Upload`**
+ - If you upload (including offline download and upload) large files, or upload a lot of files (hundreds or thousands), it is not recommended to use OpenList to operate, please go to the corresponding network disk official website to operate directly
+4. Non-admin users can manage offline download, copy, upload and other operations in the background
+ - OpenList needs to be upgraded to version, and admin can also view the user's task progress and operations
+ 
diff --git a/pages/en/guide/advanced/webdav.md b/pages/en/guide/advanced/webdav.md
new file mode 100644
index 000000000..e51030720
--- /dev/null
+++ b/pages/en/guide/advanced/webdav.md
@@ -0,0 +1,151 @@
+---
+categories:
+ - guide
+ - advanced
+top: 50
+---
+
+# WebDAV
+
+WebDAV (Web Distributed Authoring and Versioning) is a set of extensions to the Hypertext Transfer Protocol (HTTP) that enables users to collaboratively create, edit, and manage files directly on a web server.
+
+OpenList can be served as a WebDAV server, allowing users to access and modify files through a web interface.
+
+## Permission Configuration Instructions
+
+To enable a specific user to use WebDAV, the following permissions must be enabled in the `User => Permissions` settings:
+
+1. **WebDAV Read**
+ - This permission must be enabled to **view and read** files and directories in WebDAV.
+ - If the user **only needs to view or play files**, enabling this permission is sufficient.
+
+2. **WebDAV Management**
+ - This permission must be enabled to perform **write operations** (such as create, modify, delete, etc.).
+ - **Enabling only `WebDAV Management` is not enough!** You must also enable `WebDAV Management` **as well as** the specific file system permissions required for the planned operations (such as `rename`, `delete`, `copy`, `create directories or upload`, etc.).
+
+## Basic Connection Configuration
+
+Use the following parameters to connect your WebDAV client:
+
+| Configuration Item | Value / Description |
+| ------------------ | --------------------------------------------------------------------------------------- |
+| **Url** | `http[s]://your-domain:port/dav/` |
+| **Host** | Your domain (e.g., `openlist.example.com`) |
+| **Path** | `dav` |
+| **Protocol** | `http` or `https` (strongly recommend using **https** for security) |
+| **Port** | The port **must be identical** to the one used for accessing the OpenList web interface |
+| **Username** | The **username** you use to log into the OpenList web interface |
+| **Password** | The **password** you use to log into the OpenList web interface |
+
+## Storage Support
+
+
+
+::: warning
+Renaming during copy is not currently supported.
+:::
+
+## Client Software
+
+The following is a list of software that can be used to mount or access WebDAV services, categorized by platform:
+
+### 🖥️ Windows
+
+- **File Managers / Mounting Tools:**
+ - [RaiDrive](https://www.raidrive.com/) (Recommended for mounting)
+ - [Mountain Duck](https://mountainduck.io/) (Mount as a disk)
+ - [rclone](https://rclone.org/) (Command line/mounting)
+ - [OneCommander](https://www.onecommander.com/) (File manager)
+
+- **Media Players (Direct Playback):**
+ - [PotPlayer](https://potplayer.daum.net/)
+ - [Kodi](https://kodi.tv/download)
+ - [AIMP](https://www.aimp.ru/) (Audio player)
+
+### 📱 Android
+
+- **File Managers:**
+ - [Solid Explorer](https://play.google.com/store/apps/details?id=pl.solidexplorer2)
+ - [MiXplorer](https://mixplorer.com/) (Manual APK installation required, open source)
+ - [X-plore File Manager](https://play.google.com/store/apps/details?id=com.lonelycatgames.Xplore)
+ - ES File Explorer
+
+- **Media Players (Direct Playback):**
+ - [nPlayer](https://play.google.com/store/apps/details?id=com.newin.nplayer.pro)
+ - [Kodi](https://kodi.tv/download)
+ - [Reex](https://play.google.com/store/apps/details?id=com.reex.reexplorer)
+ - [VLC for Android](https://www.videolan.org/vlc/download-android.html) (Open source)
+
+### 🍎 iOS / iPadOS
+
+- **Media Players / File Managers (Direct Playback / Management):**
+ - [VidHub](https://zh.okaapps.com/product/1659622164)
+ - [nPlayer](https://apps.apple.com/us/app/nplayer/id1116905928)
+ - [Infuse](https://firecore.com/infuse)
+ - [Fileball](https://apps.apple.com/us/app/fileball-file-manager-player/id1615474435)
+ - [zFuse Player](https://apps.apple.com/us/app/zfuse-player/id1596223161)
+
+### 📺 TV (Android TV / Google TV)
+
+- **Media Players (Direct Playback):**
+ - [VidHub](https://zh.okaapps.com/product/1659622164)
+ - [nPlayer](https://play.google.com/store/apps/details?id=com.newin.nplayer.pro)
+ - [Kodi](https://kodi.tv/download)
+
+### 🍏 macOS
+
+- **File Managers / Mounting Tools:**
+ - [Mountain Duck](https://mountainduck.io/) (Mount as a disk)
+ - [rclone](https://rclone.org/) (Command line/mounting)
+
+- **Media Players (Direct Playback):**
+ - [VidHub](https://zh.okaapps.com/product/1659622164)
+ - [Infuse](https://firecore.com/infuse)
+ - [IINA](https://iina.io/) (Open source)
+
+### 🐧 Linux
+
+- **Mounting Tools / Command Line:**
+ - [rclone](https://rclone.org/) (Recommended, feature-rich)
+ - `davfs2` (System-level mounting, requires configuration)
+
+### 📝 Note-taking Software
+
+- [Joplin](https://joplinapp.org/) (Supports WebDAV sync for notes, open source)
+
+> **Feel free to contribute!** If you find other excellent and compatible WebDAV clients, feel free to recommend them.
+
+## Client Configuration Examples
+
+The interfaces of different software vary, but the key is to correctly fill in the information from the "Basic Connection Configuration" above.
+
+### nPlayer (iOS/Android)
+
+
+
+### Reex (Android)
+
+
+
+### ES File Explorer (iOS & Android)
+
+
+
+
+
+
+### Infuse (iOS/macOS)
+
+
+
+### Fileball (iOS)
+
+
+
+### PotPlayer (Windows)
+
+
+
+### Synology NAS (Add via File Station)
+
+
diff --git a/pages/en/guide/drivers/115.md b/pages/en/guide/drivers/115.md
new file mode 100644
index 000000000..eee9c2c17
--- /dev/null
+++ b/pages/en/guide/drivers/115.md
@@ -0,0 +1,384 @@
+---
+top: 697
+categories:
+ - guide
+ - drivers
+---
+
+# 115 Cloud / Share
+
+
+
+::: tip
+[**115 Official Open API**](115_open.md)
+:::
+
+## 115 Cloud
+
+### Root folder ID
+
+Open the official website of 115 Cloud and click the string behind the url when you click into the folder you want to set,
+such as ,
+which is `249163533602609229`
+
+### Cookie acquisition method
+
+The following message is displayed when mounting a 115 cloud. This is because 115 has removed the three client applications of `Windows, Mac, and Linux`.
+
+```json
+{
+ "state": 0,
+ "error": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
+ "errno": 0,
+ "message": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
+ "code": 0
+}
+```
+
+The cookies you have obtained from these three devices cannot be used. Please obtain the cookies from other devices again to mount them.
+
+#### 1. QRCode scanning method login
+
+::: tip
+Still under active development, please stay tuned!
+:::
+
+#### 2. Log in by manually grabbing Cookies
+
+The `cookie` can be obtained from the browser with your 115 account logined, or packet capture.
+
+::: tip
+Please note that cookies should not end with `;`.
+:::
+
+
+
+#### 3. Get Cookies Using Python Script
+
+Expand the detailed description to view the tutorial and script source code
+
+Source code from:[**https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61**](https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61)
+
+::: details View source
+
+```python
+#!/usr/bin/env python3
+"扫码获取 115 cookie"
+__author__ = "ChenyangGao "
+__version__ = (0, 0, 2)
+__all__ = [
+ "AppEnum", "get_qrcode_token", "get_qrcode_status", "post_qrcode_result",
+ "get_qrcode", "login_with_qrcode",
+]
+if __name__ == "__main__":
+ from argparse import ArgumentParser, RawTextHelpFormatter
+ parser = ArgumentParser(description="""\
+扫码获取 115 cookie
+默认在命令行输出,需要安装 qrcode: pip install qrcode
+ - https://pypi.org/project/qrcode/
+可以指定 -o 或 --open-qrcode 直接打开图片扫码
+""", formatter_class=RawTextHelpFormatter)
+ parser.add_argument("app", nargs="?", choices=("web", "android", "ios", "linux", "mac", "windows", "tv", "alipaymini", "wechatmini", "qandroid"), default="web", help="选择一个 app 进行登录,注意:这会把已经登录的相同 app 踢下线")
+ parser.add_argument("-o", "--open-qrcode", action="store_true", help="打开二维码图片,而不是在命令行输出")
+ parser.add_argument("-v", "--version", action="store_true", help="输出版本号")
+ args = parser.parse_args()
+ if args.version:
+ print(".".join(map(str, __version__)))
+ raise SystemExit(0)
+from enum import Enum
+from json import loads
+from urllib.parse import urlencode
+from urllib.request import urlopen, Request
+AppEnum = Enum("AppEnum", "web, android, ios, linux, mac, windows, tv, alipaymini, wechatmini, qandroid")
+def get_enum_name(val, cls):
+ if isinstance(val, cls):
+ return val.name
+ try:
+ if isinstance(val, str):
+ return cls[val].name
+ except KeyError:
+ pass
+ return cls(val).name
+def get_qrcode_token():
+ """获取登录二维码,扫码可用
+ GET https://qrcodeapi.115.com/api/1.0/web/1.0/token/
+ :return: dict
+ """
+ api = "https://qrcodeapi.115.com/api/1.0/web/1.0/token/"
+ return loads(urlopen(api).read())
+def get_qrcode_status(payload):
+ """获取二维码的状态(未扫描、已扫描、已登录、已取消、已过期等)
+ GET https://qrcodeapi.115.com/get/status/
+ :param payload: 请求的查询参数,取自 `login_qrcode_token` 接口响应,有 3 个
+ - uid: str
+ - time: int
+ - sign: str
+ :return: dict
+ """
+ api = "https://qrcodeapi.115.com/get/status/?" + urlencode(payload)
+ return loads(urlopen(api).read())
+def post_qrcode_result(uid, app="web"):
+ """获取扫码登录的结果,并且绑定设备,包含 cookie
+ POST https://passportapi.115.com/app/1.0/{app}/1.0/login/qrcode/
+ :param uid: 二维码的 uid,取自 `login_qrcode_token` 接口响应
+ :param app: 扫码绑定的设备,可以是 int、str 或者 AppEnum
+ app 目前发现的可用值:
+ - 1, "web", AppEnum.web
+ - 2, "android", AppEnum.android
+ - 3, "ios", AppEnum.ios
+ - 4, "linux", AppEnum.linux
+ - 5, "mac", AppEnum.mac
+ - 6, "windows", AppEnum.windows
+ - 7, "tv", AppEnum.tv
+ - 8, "alipaymini", AppEnum.alipaymini
+ - 9, "wechatmini", AppEnum.wechatmini
+ - 10, "qandroid", AppEnum.qandroid
+ :return: dict,包含 cookie
+ """
+ app = get_enum_name(app, AppEnum)
+ payload = {"app": app, "account": uid}
+ api = "https://passportapi.115.com/app/1.0/%s/1.0/login/qrcode/" % app
+ return loads(urlopen(Request(api, data=urlencode(payload).encode("utf-8"), method="POST")).read())
+def get_qrcode(uid):
+ """获取二维码图片(注意不是链接)
+ :return: 一个文件对象,可以读取
+ """
+ url = "https://qrcodeapi.115.com/api/1.0/mac/1.0/qrcode?uid=%s" % uid
+ return urlopen(url)
+def login_with_qrcode(app="web", scan_in_console=True):
+ """用二维码登录
+ :param app: 扫码绑定的设备,可以是 int、str 或者 AppEnum
+ app 目前发现的可用值:
+ - 1, "web", AppEnum.web
+ - 2, "android", AppEnum.android
+ - 3, "ios", AppEnum.ios
+ - 4, "linux", AppEnum.linux
+ - 5, "mac", AppEnum.mac
+ - 6, "windows", AppEnum.windows
+ - 7, "tv", AppEnum.tv
+ - 8, "alipaymini", AppEnum.alipaymini
+ - 9, "wechatmini", AppEnum.wechatmini
+ - 10, "qandroid", AppEnum.qandroid
+ :return: dict,扫码登录结果
+ """
+ qrcode_token = get_qrcode_token()["data"]
+ qrcode = qrcode_token.pop("qrcode")
+ if scan_in_console:
+ try:
+ from qrcode import QRCode
+ except ModuleNotFoundError:
+ from sys import executable
+ from subprocess import run
+ run([executable, "-m", "pip", "install", "qrcode"], check=True)
+ from qrcode import QRCode # type: ignore
+ qr = QRCode(border=1)
+ qr.add_data(qrcode)
+ qr.print_ascii(tty=True)
+ else:
+ from atexit import register
+ from os import remove
+ from threading import Thread
+ from tempfile import NamedTemporaryFile
+ qrcode_image = get_qrcode(qrcode_token["uid"])
+ with NamedTemporaryFile(suffix=".png", delete=False) as f:
+ f.write(qrcode_image.read())
+ f.flush()
+ register(lambda: remove(f.name))
+ def open_qrcode():
+ platform = __import__("platform").system()
+ if platform == "Windows":
+ from os import startfile # type: ignore
+ startfile(f.name)
+ elif platform == "Darwin":
+ from subprocess import run
+ run(["open", f.name])
+ else:
+ from subprocess import run
+ run(["xdg-open", f.name])
+ Thread(target=open_qrcode).start()
+ while True:
+ try:
+ resp = get_qrcode_status(qrcode_token)
+ except TimeoutError:
+ continue
+ status = resp["data"].get("status")
+ if status == 0:
+ print("[status=0] qrcode: waiting")
+ elif status == 1:
+ print("[status=1] qrcode: scanned")
+ elif status == 2:
+ print("[status=2] qrcode: signed in")
+ break
+ elif status == -1:
+ raise OSError("[status=-1] qrcode: expired")
+ elif status == -2:
+ raise OSError("[status=-2] qrcode: canceled")
+ else:
+ raise OSError("qrcode: aborted with %r" % resp)
+ return post_qrcode_result(qrcode_token["uid"], app)
+if __name__ == "__main__":
+ resp = login_with_qrcode(args.app, scan_in_console=not args.open_qrcode)
+ print()
+ print("; ".join("%s=%s" % t for t in resp['data']['cookie'].items()))
+```
+
+:::
+
+1. You need to install [**Python 3.11.x**](https://www.python.org/downloads/) or above
+2. If the QR code cannot be displayed properly in the `CMD` and `powershell` terminals, you can use the `-o` parameter to generate an image to scan the code, or you need to install an additional terminal
+ 1. Use the `-o` parameter to generate the image method and scan the QR code to confirm
+ - ````python
+ python main.py wechatmini -o
+ ```
+ The devices that can be obtained are as follows. If you do not fill in the device, the default device on the `Web` side will be used
+ `Web`,`android`,`ios`,~~`linux`,`mac`,`windows`~~,`tv`,`alipaymini`,`wechatmini`,`qandroid`
+ ````
+ - `alipaymini` and `wechatmini` They are Alipay Mini Program and WeChat Mini Program.
+ - **Windows、Mac、Linux should not be able to use it anymore. The official client was recently removed from the shelves.**
+ - It is recommended to use some devices that you do not commonly use, otherwise logging in will crowd out the previous ones.
+ ***
+ 2. Additional installation terminal
+ - Windows Store:**https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=zh-cn&gl=CN**
+ - GitHub Download:**https://github.com/microsoft/terminal/releases**
+ 3. Other ways, solve it yourself
+
+---
+
+Execute the command and obtain the QR code. Scan the QR code on the APP to obtain `Cookie`
+
+##### 3.1. Direct Execution
+
+```shell
+PS C:\Users\233\Desktop\115> python --version
+Python 3.12.2
+PS C:\Users\233\Desktop\115> python main.py wechatmini
+█▀▀▀▀▀▀▀█▀▀▀▀█▀███▀▀▀█▀█▀▀▀██▀█▀▀▀▀▀▀▀█
+█ █▀▀▀█ █ █▀▄▀█▄▀▀█▀█ ▄█▀▀ █▀█ █▀▀▀█ █
+█ █ █ █▀█ ▄ ▄▀▄ ▀ ▀▄ █▀▄▀█▀█ █ █ █
+█ ▀▀▀▀▀ █▀█ ▄▀▄ ▄ ▄ █ ▄▀▄▀█▀█▀█ ▀▀▀▀▀ █
+█▀██▀▀▀▀▀▀▀ ▄█ ▀█ █▀▀▀ █▀ ▄▄▄ ▀██▀█▀▀▀█
+██▄▀▀▄▀▀▀▀ ▄██▀▄██▀██▄█ █▀▀▀ ▀▀▀▄▄▀ ▄▀█
+█ ▀██▀████ ▀ ▀ ▀ █▀ ▀▀▄▄▀▄ █▄▀▄▄ ▀▀▀█
+█ ▄▀▀█▄▀█▀▀██ ▀▀▀▀ ▄▀ ▀███▀██▀▄▀▀▄▄ █
+██▄█ ▄▀▀█▄ ▀█▄▀▄▄ █ █▀ ▄▀▀ ▄▀█▀█▀█▀█
+███▄ █ ▀ ▀█ █▄ ▀▀▀▀█▀█▀█ ▄▀▀ ▄ █ ██▄█
+█ █▀▀▀█ █ ▄▄▀▄▄▀ █▄▄▀█▀ █▀▄█ ▀▀▀ ▀█▀ █
+█ █ █ █▄ ▄▀ █▀▀ ▀▄▀▀█▀▀ █ █ ▄█▀▄▄ ▀█
+█ ▀▀▀▀▀ █▀ █▄▀ ▀ ▄█▄ █▄▀▀█▄ ▀ ▀▄▄ ▄▄ █
+▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
+```
+
+Execute the command directly. The QR code will appear in the terminal for display.
+
+##### 3.2. Using the -o parameter
+
+```bash
+PS C:\Users\233\Desktop\115> python --version
+Python 3.12.2
+PS C:\Users\233\Desktop\115> python main.py wechatmini -o
+```
+
+After using the `-o` parameter, a QR code image will pop up automatically
+
+### Rapid upload
+
+- **v.3.27.0** version Enhanced Rapid upload: You can directly upload files with `Alibaba Cloud Disk Open` by copying
+ - The premise is to upload the file from 115 Rapid upload to Alibaba Cloud Disk Open, the file already exists in Alibaba Cloud Disk Open, otherwise it is a normal copy task.
+ - If you want to transfer 115 cloud disk files to Alibaba Cloud Disk in seconds, you need to turn on the Rapid upload option of Alibaba Cloud Disk, otherwise it will be uploaded in normal mode.
+ If you want to upload files using Miaochuan, it is recommended to build an OpenList locally on your home computer and add a `local storage` and `115 cloud disk` to copy Miaochuan to save resources.
+
+
+### Offline Download
+
+**v3.37.0** and above versions support calling `115 Cloud` offline download function in OpenList
+Select in the lower right corner and select `115 Cloud` for offline download options
+
+- Support: `magnet`, `http`, `ed2k` links
+ Only 115 Cloud is supported for offline download. If it is not 115 Cloud, the following error message will be displayed, Although the offline download prompt was successfully added, an error will be prompted in the background.
+- unsupported storage driver for offline download, only 115 Cloud is supported
+ 
+- Some tips for using 115 offline downloads:
+ 1. Out of sync problems may occur (manual refresh in the lower right corner )
+ 2. Currently, when the download is successful, completed tasks in the offline list are deleted.
+ 3. 115 Task URLs that are already in the offline list cannot be added again.
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 115 Share
+
+
+
+`Sharing link ID`1 and `Sharing link extraction code`2 How to obtain them respectively is clear at a glance.
+
+### Root folder ID
+
+The default is empty and the entire directory file is mounted.
+
+The folder IDs are the root folder ID and the subfolder ID respectively. The following demonstrates how to obtain the `shared root folder directory ID`1 and `other subfolder directory ID`2 respectively.
+
+#### 1. shared root folder directory ID
+
+Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
+
+Let's click on the root folder to enter. There will be a new request on the right, and then select `Load` to see the ID (cid) of our folder.
+
+
+
+#### 2. other subfolder directory ID
+
+Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
+
+There will be a new request on the right, then select `Preview` and expand it to see the IDs (cid) of other subfolders.
+
+
+
+### Error Tips
+
+For example, the 115 sharing link shown in the picture below has expired, but the sharing link can still be opened.
+
+
+
+But when adding and saving, the following error code will appear:
+
+`Failed init storage but storage is already created: failed init storage: failed to get share snap: json: cannot unmarshal number into Go struct field .data.shareinfo.share_state of type string `
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/115_open.md b/pages/en/guide/drivers/115_open.md
new file mode 100644
index 000000000..a2997b375
--- /dev/null
+++ b/pages/en/guide/drivers/115_open.md
@@ -0,0 +1,171 @@
+---
+top: 698
+categories:
+ - guide
+ - drivers
+---
+
+# 115 Open
+
+::: tip
+Developed with the official [**115 Open Platform API**](https://open.115.com)
+:::
+
+
+
+## 1. Necessary Conditions
+
+An **115** account is required.
+
+::: warning Note
+The speed and stability are related to the local network environment, the network environment of the 115 server, and the performance of the machine running OpenList.
+:::
+
+## 2. Preparation for Access
+
+### 2.1. Register an Application on the Open Platform (optional; no need to create if using the built-in key pair of OpenList/public welfare server/self-built server)
+
+::: tip
+Please register the application according to the requirements of the 115 Open Platform.
+:::
+
+Open Platform address: [115 Open Platform: https://open.115.com](https://open.115.com)
+
+### 2.2. Obtain Tokens
+
+1. Visit [api.oplist.org](https://api.oplist.org) **⚠️ If using a public welfare server/self-built server, visit the address of the public welfare server/self-built server**.
+
+2. Select **115 Network Disk Verification** from the drop-down box.
+
+ 
+
+ 
+
+3. If you are using the built-in key pair of `OpenList (or public welfare server/self-built server)` (i.e., you do not have application information from the 115 Open Platform), please configure according to `3.1`, `3.2`, and `3.3`:
+
+ 3.1. Check `Use parameters provided by OpenList`.
+
+ 3.2. Leave both `Client ID (ClientID/AppID)` and `Application Secret (AppKey/Secret)` blank.
+
+ 3.3. Click the `Get Token` button.
+
+ 
+
+ 
+
+4. If you are using your own created OAuth client ID and secret, please configure according to `4.1`, `4.2`, and `4.3`:
+
+ 4.1. Do not check `Use parameters provided by OpenList`.
+
+ 4.2. Enter your `AppId` in `Client ID` and your `AppSecret` in `Application Secret`.
+
+ 4.3. Click the `Get Token` button.
+
+ 
+
+ 
+
+5. In the pop-up window, log in to your 115 account and authorize OpenList to access your 115 network disk.
+
+ 
+
+6. After successful authorization, the page will display your `Access Token` and `Refresh Token`. Please copy and save these two tokens.
+
+ 
+
+ 
+
+## 3. Adding 115 Network Disk to OpenList
+
+### 3.1. Configuration Instructions
+
+#### 3.1.1. Root Folder ID
+
+The default root directory ID is: `0`
+
+Open the 115 network disk official website, and when clicking to enter the folder to be set, click the number after `cid` in the URL.
+
+For example,
+
+The `root folder ID` of this folder is `249163533602609229`.
+
+### 3.2. Start Adding
+
+1. Open the management interface of OpenList and click `Storage` in the left menu.
+
+2. On the storage list page, click the `Add Storage` button in the upper right corner.
+
+3. Select the driver as `115 Open Platform`.
+
+ 
+
+ 
+
+4. Enter the mounting path, such as: `115`.
+
+5. Enter the root folder ID obtained above in `Root Folder ID` (please refer to [3.1.1. Root Folder ID](#_3-1-1-root-folder-id)).
+
+6. Enter the obtained `Refresh Token` and `Access Token` in the refresh token (if not obtained, please refer to [2. Preparation for Access](#_2-preparation-for-access)).
+ - 115's token refresh mechanism does not require AppKey and has IP-based rate limiting, so it is implemented using [local logic](https://github.com/OpenListTeam/115-sdk-go).
+
+7. Click the `Add` button to complete adding the 115 network disk.
+
+### 3.3. Method for Refreshing Access Token
+
+```mermaid
+sequenceDiagram
+ participant OpenList
+ participant 115
+ OpenList->>115: Post refresh_token
+ 115->>OpenList: Get new access_token and refresh_token
+```
+
+## 4. Notes
+
+::: warning Handling Method for Token Leakage
+If the Token is accidentally leaked, you can go to the 115 device login management to解除应用授权 (revoke application authorization).
+
+- 115 APP: [iOS, Android] versions need to be ≥ 35.11.0
+- 115 Web端: [https://115.com/?mode=device_manage](https://115.com/?mode=device_manage)
+
+ When it expires, the following content will be prompted:
+
+ ```json
+ failed get objs: failed to list objs: code: 40140116, message: no auth
+ ```
+
+An account can obtain two `Refresh tokens` in the same application. After the third acquisition, the first obtained `Refresh token` will expire. Using the first `Refresh token` will prompt the above error.
+:::
+
+## 5. Using Other APP IDs to Obtain Refresh Tokens (Not Yet Implemented)
+
+::: tip
+Under development, the tutorial has not been updated yet. Stay tuned!
+:::
+
+## 6. Mobile QR Code Authorization PKCE Mode (Not Yet Implemented)
+
+::: tip
+Under development, the tutorial has not been updated yet. Stay tuned!
+:::
+
+## 7. Default Download Method Used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/123.md b/pages/en/guide/drivers/123.md
new file mode 100644
index 000000000..bf7ede4e9
--- /dev/null
+++ b/pages/en/guide/drivers/123.md
@@ -0,0 +1,154 @@
+---
+top: 695
+categories:
+ - guide
+ - drivers
+---
+
+# 123 Pan / Share / Link
+
+
+
+::: warning
+123 Cloud Disk has implemented anti-leech measures for this **reverse-engineered driver**. To avoid unnecessary disputes, it is recommended that users choose the more standard 123 Open Platform driver. If you continue to use this driver, you need to enable a **local proxy** to prevent anti-leech detection.
+
+- [123 Open Platform](./123_open.md)
+
+:::
+
+## Personal
+
+Free user 1G traffic download, unlimited upload, multi-IP sharing is prohibited
+
+::: warning
+
+```json
+failed get objs: failed to list objs:当前账号存在安全风险,请使用短信验证码或者微信进行登录。
+```
+
+solution:
+
+- This is because the 123 cloud disk officially prohibits the mounting on strange devices, If you are mounted locally, `or` Windows Server server mount `to open the 123 cloud disk web page to log in or modify a password once
+
+:::
+
+https://www.123pan.com/
+
+Just fill in the account password.
+
+### Username
+
+The mobile phone number used to log in
+
+### Password
+
+The password used to log in
+
+### Root folder file_id
+
+Enter the folder you want to mount, the last string of the official website URL, such as:
+
+
+
+### Recommendations
+
+- It seems that the 123 API has a limited number of loads each time, so if you load hundreds of files in a folder at one time, an error may be reported
+- It is recommended to A useful approach is not to put too many sub-items in the same folder.
+
+## Link
+
+only adapted to the authentication function, the link also needs to be filled in by yourself, like [UrlTree](/en/guide/drivers/url_tree), fill in the direct link copied in 123 direct link.
+
+::: danger Please read this reminder carefully
+Since 123 Cloud Disk Direct Link is a paid service with a storage quota, if you decide to add more storage, please ensure you set up passwords, metadata, and other protective measures to prevent malicious traffic.
+
+After configuring these settings, test them in incognito mode to confirm everything is working correctly. If you fail to implement adequate anti-theft measures and experience malicious traffic overload, you will be held responsible for the consequences.
+
+:::
+
+First open **`123 Cloud Disk Direct Link Management`**: **https://www.123pan.com/DirectLink** Set an authentication key in the lower right corner, and then turn on the authentication status switch
+
+
+
+- Open Settings 123 Cloud Disk Settings: **https://www.123pan.com/Setting** and find the account ID [`1` label in the picture below]
+- How to activate direct link? (You need to activate membership to use it)
+ - Find the folder you want to open, right-click on `Enable Direct Link Space`, and after opening it, you will see a link icon in the folder [Tag `2` in the picture below]
+- How to get a direct link to a file? [Tag `3` in the picture below]
+ - Enter the folder that has 'enabled direct link space', find the file you need to obtain, right-click 'Get direct link', and fill in the OpenList configuration after obtaining it.
+ 
+
+### Fill in example
+
+- **Origin urls**:Fill in the direct link to the files we copied one by one
+ - It supports creating different folders like [UrlTree](/en/guide/drivers/url_tree), and supports filling in the file size and modification time (four options are provided for use, like the UrlTree filling, refer to the second example of the picture below)
+ - File size unit: `B` bytes. For example, if you want to write a 1MB file, it is 1048567 bytes. You can search for the specific byte conversion in your browser (you can leave it blank).
+ - File modification time: It is `Unix timestamp`. You can search in the browser for the specific conversion (you can leave it blank).
+
+ Fill in the format:
+
+ ```txt
+ [FileSize:][Modified:]URL
+ 127451136:1694101621:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_mips64el.deb
+ [FileSize:]URL
+ 134847488:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_loong64.deb
+ [Modified:]URL
+ 1694101621:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_arm64.AppImage
+ URL
+ https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_x86_64.AppImage
+ ```
+
+- **Private key**:
+ - You can set up the direct link management page yourself and turn it on. Please turn it on.
+- **Uid**:
+ - Account ID in the account settings page
+- **Valid duration**:
+ - The file direct link validity period, in minutes, is filled in by default to 30 minutes
+
+
+
+
+
+## Share
+
+Fill in the driver's **`share key`** and optional **`share password`** (if there is a password, you need to fill in), the root folder ID defaults to `0` to display all files
+
+### Fill in the example
+
+
+
+### Share Password
+
+Fill in if you have it, don't if you don't
+
+### Root folder file_id
+
+The ID of the root directory of the shared link is `0`, displaying all files
+
+If you only want to display a certain folder, open the developer mode (F12) to clear all requests (maybe 123 prohibits debug debugging, you need to close this by yourself to continue)
+
+Find the request on the right side of the picture in the upper-level directory request of the directory you want to display, then click `Response`, find the format button `{}` below and format it, and you can see the relevant directory ID.
+
+If you are not sure whether the directory ID is correct or not, there is a directory name under the directory ID
+
+
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/123_open.md b/pages/en/guide/drivers/123_open.md
new file mode 100644
index 000000000..eb2d378ba
--- /dev/null
+++ b/pages/en/guide/drivers/123_open.md
@@ -0,0 +1,120 @@
+---
+top: 696
+categories:
+ - guide
+ - drivers
+---
+
+# 123 Open
+
+https://www.123pan.com/developer
+
+
+
+## 1. Developer Application
+
+::: warning
+This driver uses the [developer authorization mode](https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/hpengmyg32blkbg8), which grants direct management access to the cloud drive associated with the provided public/private key pair, , so you **must use your client id and client secret**.
+
+The acquired token counts as a login device
+
+:::
+
+**Application Method**: Visit the [123 Open Platform Official Website](https://www.123pan.com/developer), read the Developer Agreement, fill in the required fields marked with `*`, and apply for the `client_id` and `client_secret`.Typically, after your application is approved the keys will be sent to your email **remember to check your spam folder, and please keep the keys sent by email safe**.
+
+1. Sign the Developer Agreement
+
+2. Fill out the application materials
+
+3. Wait for the review notification
+
+**Reference Tutorial**: [OpenListTeam/discussions#55](https://github.com/orgs/OpenListTeam/discussions/55)
+
+### 2. Get UID
+
+The method to obtain the "Cloud Drive UID" required during the application process is as follows:
+
+1. **Log in to the 123 Cloud Drive web platform**
+
+ Visit the 123 Cloud Drive official website and log in with your account (phone number).
+
+2. **Go to the "Settings" page**
+
+ After logging in, click on the profile picture or username at the top right, and select "Settings" (or directly visit: ).
+
+3. **Find the "Account ID"**
+
+ In the "Account Settings" or "Security Settings" section, locate the "Account ID," which is your "Cloud Drive UID." Copy it and paste it into the application form.
+
+## 4. Add in OpenList
+
+### RefreshToken
+
+**keep it empty**
+
+### Client ID
+
+Enter your client ID
+
+### Client Secret
+
+Enter your client secret
+
+### Root Folder ID
+
+The default root directory ID is: `0`
+
+Open the official website of 123 Cloud Drive, navigate to the folder you want to set, and then click the number following `homeFilePath` in the URL.
+
+For example,
+
+API queries can also be used
+
+The `root folder ID` of this folder is `123456`.
+
+### Direct Link
+
+Disabled by default; returns standard download links. When enabled, returns CDN direct links, which require VIP access and will consume direct link traffic quota.
+
+Users must manually enable direct link space: Go to the 123 Cloud Drive official website, right-click a folder under the **root directory**, and select `Enable Direct Link Space (VIP)`.
+
+
+
+### Direct Link Private Key
+
+Prerequisite: Enable `Direct Link`.
+
+Leave empty to disable direct link authentication and return permanent direct links.
+
+To prevent your site resources from being maliciously downloaded or stolen, you can configure an "Authentication Key" in 123 Cloud Drive's **Direct Link** → **Basic Function Configuration** → **URL Authentication**, and then set **Authentication Status** to **Enabled**.
+
+After entering the key, the obtained direct links will automatically include authentication parameters.
+
+
+
+### Direct Link Valid Duration
+
+Prerequisite: Enable `Direct Link` and configure the `Direct Link Private Key`.
+
+Used to generate the expiration timestamp in the direct link authentication parameters.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[local proxy]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[302]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/139.md b/pages/en/guide/drivers/139.md
new file mode 100644
index 000000000..aab2d4867
--- /dev/null
+++ b/pages/en/guide/drivers/139.md
@@ -0,0 +1,219 @@
+---
+top: 692
+categories:
+ - guide
+ - drivers
+---
+
+# 139Yun
+
+
+
+Cloud disk address: ****
+
+::: warning
+The OpenList version must be greater than `v3.41.0` to use this tutorial.
+:::
+
+::: tip
+Most parameters can be obtained from browser DevTools. See [Search keywords](#search-keywords).
+:::
+
+## Quick start
+
+For long-term use, use the new personal cloud with password login fallback. This lets OpenList persist the generated `Authorization` and renew it automatically when possible.
+
+1. Log in to in your browser.
+2. Copy cookies from `mail.10086.cn` and paste them into `MailCookies` as a Cookie Header String, for example `key1=value1; key2=value2`. Do not paste JSON, a table, or one cookie per line.
+3. Fill your 139 email/mobile account in `Username`, and fill the corresponding password in `Password`.
+4. Add a `139Yun` storage in OpenList and fill:
+ - `Type`: `personal_new`
+ - `MailCookies`: the cookies copied in step 2
+ - `Username`: your account
+ - `Password`: your password
+ - `Root folder ID`: leave empty or fill `/` for the root directory
+5. Leave `Authorization`, `Cloud ID`, and `UserDomainID` empty.
+6. Save the storage.
+
+If you only want to mount quickly, you can fill only `Authorization`: log in to , find a `hcy/file/list` request in DevTools -> Network, copy the request header `Authorization`, and paste only the content after `Basic `.
+
+If you want to mount a subfolder, enter that folder on the 139Yun website first, then use the current `parentFileId` or `currentCatalogID` as `Root folder ID`.
+
+## Authentication
+
+The driver supports three authentication methods. Use only one method unless you need password login as a fallback.
+
+| Method | Fields to fill | Notes |
+| ----------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Password login fallback | `MailCookies`, `Username`, `Password` | Recommended for long-term use. `MailCookies` must be a Cookie Header String, such as `key1=value1; key2=value2`. The driver can generate and persist a new `Authorization`, and can fall back to password login when token refresh fails. |
+| Authorization | `Authorization` | Fastest setup. Fill in the value after `Basic `. Do not include `Basic` itself. You may need to update it manually after it expires or refresh fails. |
+| Mail cookies fast login | `MailCookies` | Use cookies from `mail.10086.cn`. `MailCookies` must be a Cookie Header String and contain valid key-value pairs; `Os_SSo_Sid` and `RMKEY` are used for fast login. |
+
+`Username`, `Password`, and `MailCookies` are not required when `Authorization` is valid, even if an old frontend marks them as required.
+
+When using password login fallback, `MailCookies`, `Username`, and `Password` must be filled together.
+
+`MailCookies` should look like the value of an HTTP `Cookie` request header: `key1=value1; key2=value2; key3=value3`.
+
+## Type
+
+OpenList currently supports five 139Yun storage types. `personal_new` is the default.
+
+| Type | Use for | Root folder ID when empty | Cloud ID | Notes |
+| -------------- | ------------------------- | ------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------- |
+| `personal_new` | New personal cloud | `/` | Not required | New API. Uses direct EOS multipart upload. |
+| `family` | My Family -> Family Files | Automatically tries to save `data.path` without the `root:/` prefix | Required | Uses Family Cloud APIs. If auto-detection fails, fill the folder ID manually. |
+| `group` | Shared group | Uses `Cloud ID` | Required | For groups created by others, manually fill the folder ID to avoid first-level folder loops. |
+| `personal` | Old personal cloud | `root` | Not required | Legacy personal cloud. Most accounts have been migrated to `personal_new`. |
+| `share` | Shared link mount | Share link ID from `LinkID` | Not required | Mount other users' shared content. Use `LinkID` to specify one or more share links. |
+
+::: warning
+After changing `Type`, clear or update `Root folder ID`, then save the storage again.
+:::
+
+## Root folder ID
+
+`Root folder ID` specifies the mounted directory.
+
+- `personal_new`: use `/` for the root. For a subfolder, use the folder ID from `parentFileId` or `currentCatalogID`.
+- `family`: leave empty to let OpenList try to read `data.path` automatically. When filling manually, remove the `root:/` or `root:` prefix.
+- `group`: leave empty only when mounting your own group root. For a subfolder or a group created by others, fill the folder ID manually.
+- `personal`: use `root` for the legacy root.
+- `share`: not used. The share link ID from `LinkID` replaces the root folder concept.
+
+Do not add extra `/` around subfolder IDs. For example, use `abc123`, not `/abc123`.
+
+## Cloud ID
+
+`Cloud ID` is required only for `family` and `group`.
+
+- `family`: family cloud ID.
+- `group`: group ID.
+- `personal_new` and `personal`: leave empty.
+- `share`: leave empty.
+
+## User domain ID
+
+`UserDomainID` is the `ud_id` value in cookies. It is optional for mounting and is mainly used to show disk usage in storage details. If it is empty, file listing and downloads can still work, but capacity statistics are unavailable.
+
+## Advanced options
+
+- `Custom upload part size`: upload part size in bytes. `0` means automatic. The driver uses `100 MB` by default and increases it to `512 MB` for files larger than `30 GB`.
+- `Report real size`: enabled by default. For old personal, family, and group uploads, it reports the real file size to the upstream API.
+- `Use large thumbnail`: disabled by default. Enable it to prefer large image thumbnails when the new personal cloud API returns them.
+- `Use old stream upload`: disabled by default. Enable it to use the legacy streaming upload method for family and group cloud types. The new method supports rapid upload (server-side duplicate check) but does not support streaming; the legacy method does not support rapid upload.
+
+## Proxy Range
+
+`Proxy Range` is enabled by default in the driver, but it only takes effect after enabling `Web Proxy` or `WebDAV Native Proxy`.
+
+Enable proxy mode when a player or downloader cannot handle the upstream 302 link correctly, for example when video playback fails, seeking fails, or resumable downloads do not work.
+
+## Search keywords
+
+Use browser DevTools to find the fields below.
+
+| Need | Where to search | Field |
+| ------------------------- | --------------------------------------------------- | -------------------------------------------------------------- |
+| `Authorization` | Network request headers on `yun.139.com` | `Authorization: Basic ...`; copy only the value after `Basic ` |
+| New personal folder ID | `hcy/file/list` request, or browser storage | `parentFileId` or `currentCatalogID` |
+| Family Cloud ID | `queryContentList` request payload | `cloudID` |
+| Family folder ID | `queryContentList` response | `data.path`; remove `root:/` or `root:` when filling manually |
+| Group ID | `queryGroupContentList` request payload | `groupID` |
+| Group folder ID | `queryGroupContentList` request payload or response | `path` or folder ID |
+| Legacy personal folder ID | `getDisk` request or response | `catalogID` |
+| `UserDomainID` | Browser cookies | `ud_id` |
+| Share link ID | Share page URL on `yun.139.com` | The path segment after `/share/` in the sharing URL |
+
+In Firefox, cookies and local storage can be easier to find in DevTools -> Storage.
+
+### Personal new
+
+Choose one of the following methods to find `Authorization` and folder ID.
+
+
+
+
+If you want the folder ID of a subfolder, enter that subfolder first and then inspect the new request or storage value. Otherwise, the old folder ID may still be displayed.
+
+### Personal cloud
+
+
+
+
+### Family cloud
+
+
+
+
+::: details Teaching video
+Although the video is for V2, the method for obtaining folder ID and Cloud ID is still similar.
+
+****
+:::
+
+### OpenList fill in examples
+
+- `Authorization`: fill in only the content after `Basic `.
+- New personal folder ID: enter the target folder first, then use the current `currentCatalogID`.
+
+
+
+
+
+## Share mount
+
+The `share` type allows you to mount shared content from other 139Yun users. You need a valid authorization to access download APIs.
+
+### LinkID format
+
+### LinkID 格式
+
+`LinkID` supports the following formats:
+
+- Single share: directly enter the share link ID
+- Password-protected share: `link_id#password`
+- Multiple shares: separate multiple entries with commas or new lines. For example: `share_a,share_b,share_c` or `share_a#pass1,share_b`
+
+### Get share link ID
+
+1. Open the share link in your browser, e.g. `https://yun.139.com/w/#/share/xxxxx`
+2. The path segment after `/share/` is the share link ID (e.g. `xxxxx`)
+3. If the share is password-protected, append `#password` after the link ID
+
+### Configuration
+
+- **Type**: `share`
+- **LinkID**: one or more share link IDs (see format above)
+- **Authorization** or **MailCookies + Username + Password**: required for authentication (same as other types)
+- **Root folder ID**: not used for share type. The share link ID in `LinkID` determines the mounted content.
+- **Cloud ID**: leave empty
+
+Notes:
+
+- Upload operations are not supported for the `share` type.
+- When mounting multiple shares, the root directory shows each share as a separate folder.
+- `${data_path}` resolves to the share root for path-based operations.
+
+## Download method
+
+The default download method is 302 redirection. If a player such as PotPlayer cannot play through 302, switch that mount to proxy mode or mount it through WebDAV with `WebDAV Native Proxy`.
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/163music.md b/pages/en/guide/drivers/163music.md
new file mode 100644
index 000000000..f42673f64
--- /dev/null
+++ b/pages/en/guide/drivers/163music.md
@@ -0,0 +1,51 @@
+---
+top: 677
+categories:
+ - guide
+ - drivers
+---
+
+# 163 Music Drive
+
+
+
+163 Music Drive can only upload music and other operations on the mobile phone, and the web page cannot operate
+
+## Cookie
+
+Open **https://music.163.com** and then open the F12 developer mode
+
+Open a request at will, just carry the `Cookie` to find the following two parameters and fill in the OpenList` Cookie`
+
+- **\_\_csrf** 、**MUSIC_U**
+ 
+
+## Song Limit
+
+You can only get 200 songs by default. If you exceed you, you can modify this option
+
+### Precautions
+
+1. If there are many list files, it is recommended to open pagination loading, otherwise it will not be loaded
+2. Cloud space can only upload audio format files, and cannot upload other format files
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/189.md b/pages/en/guide/drivers/189.md
new file mode 100644
index 000000000..830fa4e08
--- /dev/null
+++ b/pages/en/guide/drivers/189.md
@@ -0,0 +1,105 @@
+---
+top: 694
+categories:
+ - guide
+ - drivers
+---
+
+# 189Cloud
+
+
+
+::: tip
+The web -side login has been replaced with sliding verification code, **no longer supports OCR or manual input**. If the verification code needs to be used, please use the add `Cookie` to log in
+
+If you encounter "Device ID does not exist, secondary device verification required",Open the 189 Account website at , log in, and then disable the Device Lock..
+
+:::
+
+## 189CloudTV
+
+Uses the TV interface of 189 Cloud Drive, with the fewest mounting steps.
+
+(Some users have reported throttling issues. If you experience video playback stuttering, black screens, or failure to load, please switch to the 189 Cloud PC client.)
+
+1. When mounting, select 189CloudTV. Leave the login parameters blank. If you are unsure, **just fill in the mount path**.
+
+2. After clicking save, simply return to the storage management page. You can choose to log in by scanning a QR code or click the link to log in (for link login, if you are unsure, it is recommended to **right-click the link and open it in a new window**).
+
+
+
+3. After entering, select SMS login. Once logged in, return to the storage management page. Disable and re-enable the storage to use it normally (you may need to refresh the page).
+
+
+
+## Personal Cloud
+
+### Username
+
+the phone number used to log in
+
+### Password
+
+password for login
+
+### Root folder ID
+
+The string at the end of the official website url, such as:
+
+- https://cloud.189.cn/web/main/file/folder/-11 -> `-11`
+- https://cloud.189.cn/web/main/file/folder/71398114617385472 -> `71398114617385472`
+
+ 
+
+### Family transfer
+
+Give 189 Cloud adds Personal's `Family Transfer option`, which is convenient for users without VIP, and a large number of family cloud spaces upload.
+
+- Note: The old upload interface family cloud will still limit the upload quantity, so `Rapid upload` and ` Old Upload` will not take effect
+
+## Family Cloud
+
+(189 Cloud PC Driver Only) Use a computer browser, open the developer tool (F12), switch the emulation device and select the mobile device
+
+Open https://h5.cloud.189.cn/main.html#/family, enter the folder you want to mount, you can see the request in the network, and then find the required parameters:
+
+
+
+### OpenList fill in examples:
+
+#### 189 Cloud
+
+Fill in the account1and password2,Then click one request in the request, just bring `Cookies`3, click on one at will Then fill in,Cookie expires time is unknown
+
+
+
+#### 189 CloudPC
+
+
+
+Video reference: **https://www.bilibili.com/video/BV16A4y197De**
+
+## suggestion
+
+It is recommended to use the 189 Cloud PC first, [**Notes click to view.**](../../faq/howto.md#when-adding-a-189-cloud-storage-the-device-id-does-not-exist-and-a-secondary-device-verification-is-required)
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/alias.md b/pages/en/guide/drivers/alias.md
new file mode 100644
index 000000000..1e1eafee9
--- /dev/null
+++ b/pages/en/guide/drivers/alias.md
@@ -0,0 +1,10 @@
+---
+top: 997
+categories:
+ - guide
+ - drivers
+---
+
+# Alias
+
+
diff --git a/pages/en/guide/drivers/alias_text.md b/pages/en/guide/drivers/alias_text.md
new file mode 100644
index 000000000..abd6a59c8
--- /dev/null
+++ b/pages/en/guide/drivers/alias_text.md
@@ -0,0 +1,282 @@
+**Alias** is a feature that allows multiple different cloud drives or storage paths to be merged into a unified directory. By combining paths, content from different cloud drives or folders can be displayed in the same interface, simplifying access and management.
+
+For example: Cloud Drive Account 1 and Cloud Drive Account 2 both contain a folder named `Movies`, but the contents of these folders may not be identical.
+
+- **Previously (Virtual Path)**:
+
+ You could only mount them to two different paths separately, like:
+ - `CloudDrive1/Movies`, `CloudDrive2/Movies`
+ - `Movies/CloudDrive1`, `Movies/CloudDrive2`
+
+- **Now (Alias)**:
+
+ An aggregated folder (Movies) is provided, which can contain content from both Cloud Drive 1 and Cloud Drive 2 simultaneously.
+
+Folders with the same name will be automatically merged into one. The contents of the folder are the sum of the contents of all folders with the same name. Regarding how this driver handles files with the same name, please refer to the [Path conflict policies](/en/guide/drivers/alias#path-conflict-policies) section later.
+
+For Example:
+
+
+
+In the diagram, we can see that two different folders are merged into one. Files and folders with the same name are also combined, and unique ones are displayed separately.
+
+Example explanations:
+
+- **Example 1**: `riluo.jpg` is unique to Cloud Drive 1, so it is shown separately.
+- **Example 2**: Both folders contain a `video` folder, but the contents of these folders will be merged. Subfolders also follow the **same-name merging** display rule. Both folders contain two videos, but one of them has the same name. After merging according to the **same-name merging** rule, three video files will be displayed in total.
+
+## Paths filling method
+
+There are two ways to fill in:
+
+1. The first one is that you can only fill in the path of the subfolder and the folder with the same name must be used at the end. It is not recommended to use :x:
+ - Paths filling example:
+ ```
+ /file1/locala
+ /file2/localb
+ ```
+2. The second is to directly mount the root folder path, using the `renaming` method, it is strongly recommended to use :heavy_check_mark:
+ - Paths filling example:
+
+ ```
+ #Example 1 Directly write the root folder
+ merge: /file1
+ merge: /file2
+
+ #Example 2 Mount different path folders for merging
+ merge: /file1/localtest233
+ merge: /file2/videos/TV series
+ merge: /file3 2/TV/Domestic TV Series/Station XX
+ ```
+
+According to the second method, we can `merge` and display different folders, which is convenient and quick.
+
+## Path conflict policies
+
+The three configuration items—**Reading conflict policy**, **Writing conflict policy**, and **Putting conflict policy**—determine how the Alias handles files or folders with the same name and identical paths in the backend drivers. Their values and corresponding behaviors are as follows:
+
+### Reading conflict policy
+
+Determines the behavior for handling files with the same name when downloading, copying (as source files), and extracting (as source files) (excluding moving).
+
+- Get the file corresponding to the first conflict path: Select the file from the first available path (from top to bottom in the Paths) where the file exists.
+
+- Load balancing on a per-file basis: Randomly select one file from the available duplicates.
+
+- Load balancing on a per-part basis:
+ - During 302 downloads, copying, or extracting, it falls back to the **Load balancing on a per-file basis** strategy.
+ - When using local proxy downloads, each transmitted chunk is randomly assigned to one of the duplicate files. This requires the backend driver to support Range requests. For details on setting the chunk size, refer to the section [Download concurrency, Download part size](/en/guide/drivers/alias#download-concurrency-download-part-size).
+ - This policy achieves the actual effect as shown in the figure. It is important to note that this diagram is only intended to conveniently demonstrate the operation of this policy. The statement that "participating load-balanced files with the same name have different contents" is **not** a correct usage of this driver. OpenList does not guarantee stable or correct results under such circumstances, nor will it address any issues arising from this usage scenario. Furthermore, the actual minimum size for file splitting is 1 KiB, not 1 byte, so the effect depicted in the diagram will not occur in the stable version.
+
+ 
+
+::: tip
+When a copy operation involves multiple source paths and target paths, the Alias will first attempt to pair source and target paths that belong to the same drive. Only for target paths that cannot be matched in this way will the method specified by the **Reading conflict policy** be used to select a source path.
+
+For example, when copying:
+
+- `DriverA/source/file.txt`
+- `DriverB/source/file.txt`
+
+to:
+
+- `DriverB/target/`
+- `DriverA/target/`
+- `DriverC/target/`
+
+The Alias driver will perform the following operations:
+
+1. Copy `DriverA/source/file.txt` to `DriverA/target/`, since both are located in Driver A.
+2. Copy `DriverB/source/file.txt` to `DriverB/target/`, since both are located in Driver B.
+3. For `DriverC/target/`, which has no matching source in the same driver, select `file.txt` from either Driver A or Driver B according to the **Reading conflict policy**, and copy it to `DriverC/target/` via an upload operation (creating a copy task).
+
+:::
+
+::: tip
+The move operation involves a matching process similar to that of the copy operation. For target paths that cannot be matched with a source path from the same driver, the Alias will randomly select from the still-unmatched source paths to create a pairing (**one-to-one correspondence**). If the number of source paths exceeds the number of target paths, the unmatched source paths will be deleted. If the number of source paths is less than the number of target paths, the move operation will fail. The matching behavior for the move operation is not affected by the **Reading conflict policy**.
+
+For example, in the case described for the copy operation, since there is no source path corresponding to `DriverC/target/`, the move operation will fail.
+
+As another example, when moving:
+
+- `DriverA/source/file.txt`
+- `DriverB/source/file.txt`
+- `DriverD/source/file.txt`
+- `DriverE/source/file.txt`
+- `DriverG/source/file.txt`
+
+to:
+
+- `DriverA/target/`
+- `DriverB/target/`
+- `DriverC/target/`
+- `DriverF/target/`
+
+The Alias will perform the following operations:
+
+1. Move `DriverA/source/file.txt` to `DriverA/target/`.
+2. Move `DriverB/source/file.txt` to `DriverB/target/`.
+3. Randomly select one file from Driver D, E, or G, and move it to `DriverC/target/` (by creating a move task, which is essentially an upload followed by deletion). Let's assume E is selected.
+4. Randomly select one file from the remaining unmatched drivers (D or G), and move it to `DriverF/target/`. Let's assume G is selected.
+5. Delete `DriverD/source/file.txt`.
+
+:::
+
+### Writing conflict policy
+
+Determines the behavior for renaming or deleting files/folders with the same name, as well as creating folders within identically named folders.
+
+- **Disable writing**: Prohibits rename, delete, and folder creation operations.
+- **Write into the first conflict path**: Operates on the driver containing the target path that appears first (top to bottom) in the configured path list.
+- **Allow unique path**: Executes the operation only if the target path is unique (exists in only one backend path). Otherwise, the operation is prohibited.
+- **Allow full conflict paths**: Executes the operation only if the target path exists in **all** configured backend paths, applying the operation across all of them. Otherwise, the operation is prohibited.
+- **Allow unique path and full conflict paths**: Allows the operation when the target path is either unique or exists in all configured backend paths.
+- **Write into all conflict paths**: Forwards the operation to all backend paths where the target path exists.
+
+::: tip
+If the above explanation is unclear, you can refer to the following example.
+
+- In Driver A, the file exists: `file1.txt`
+- In Driver B, the files exist: `file1.txt`, `file2.txt`, `file3.txt`
+- In Driver C, the files exist: `file1.txt`, `file3.txt`
+
+Configured backend paths:
+
+```
+test:DriverA
+test:DriverB
+test:DriverC
+```
+
+Then:
+
+- Since the sub-path `/file1.txt` is valid in all configured paths (`DriverA/`, `DriverB/`, `DriverC/`), `/file1.txt` is referred to as a **full conflict path**.
+- Since the sub-path `/file2.txt` is valid only under the single backend path `DriverB/`, `/file2.txt` is referred to as a **non-conflict path** or **unique path**.
+- Since the sub-path `/file3.txt` exists under both `DriverB/` and `DriverC/`, and the number of backend paths where it exists is neither 1 nor the maximum (3), `/file3.txt` is neither a non-conflict path nor a full conflict path.
+
+When renaming any file to `file4.txt`, the corresponding files in the following drivers will be renamed:
+
+| Writing conflict policy | file1.txt | file2.txt | file3.txt |
+| ----------------------------------------- | ---------------------------- | --------- | ------------------ |
+| Disable writing | Fails | Fails | Fails |
+| Write into the first conflict path | Driver A | Driver B | Driver B |
+| Allow unique path | Fails | Driver B | Fails |
+| Allow full conflict paths | Driver A, Driver B, Driver C | Fails | Fails |
+| Allow unique path and full conflict paths | Driver A, Driver B, Driver C | Driver B | Fails |
+| Write into all conflict paths | Driver A, Driver B, Driver C | Driver B | Driver B, Driver C |
+
+:::
+
+### Putting conflict policy
+
+Determines the behavior for uploading to, copying to, moving to, or extracting to folders with the same name.
+
+- **Disable putting**, **Put into the first conflict path**, **Allow unique path**, **Allow full conflict paths**, **Allow unique path and full conflict paths**, **Put into all conflict paths**: These options function identically to their counterparts in the **Writing conflict policy**.
+- **Random load balancing**: Randomly selects one valid path for the upload.
+- **Weighted random load balancing based on remaining space**: Retrieves the remaining free space of all valid paths, skips paths that fail to report free space or have insufficient space for the file being uploaded, and then randomly selects from the remaining valid paths, weighting the choice by their remaining capacity. If none of the valid paths that successfully reported free space have enough capacity for the file, **a random selection is made from among the valid paths that failed to report capacity**.
+- **Strict weighted random load balancing based on remaining space**: Retrieves the remaining free space of all valid paths, skips paths that fail to report free space or have insufficient space for the file being uploaded, and then randomly selects from the remaining valid paths, weighting the choice by their remaining capacity. If none of the valid paths that successfully reported free space have enough capacity for the file, **an error message is returned directly**.
+
+::: tip
+The load balancing mechanisms within the **Reading conflict policy** and the **Putting conflict policy** are two largely unrelated features. Informally speaking, the load balancing in the **Reading conflict policy** is analogous to RAID 1, while the load balancing in the **Putting conflict policy** is analogous to RAID 0. For specific use cases of each, please refer to [Advanced / Load balancing](/en/guide/advanced/balance).
+
+If you've understood the above, you'll realize that enabling both **Reading Load Balancing** and **Putting Load Balancing** won't make load balancing more balanced. In fact, this configuration produces effects that are hardly any different from enabling only **Putting Load Balancing**.
+
+:::
+
+::: tip
+The legacy version of the Alias used three Boolean configuration items—**Writable**, **Protect same name**, and **Parallel write**—to implement path conflict policy functionality. The correspondence between the legacy configuration and the new configuration is as follows:
+
+- In the legacy configuration, the **Reading conflict policy** was always set to **Get the file corresponding to the first conflict path**.
+- In the legacy configuration, when **Writable** was disabled, both the **Writing conflict policy** and the **Putting conflict policy** were set to **Disabled**.
+- When **Writable** was enabled, the **Writing conflict policy** and the **Putting conflict policy** were both determined as follows:
+ | | Parallel write disabled | Parallel write enabled |
+ | -------------------------- | -------------------------------------- | ----------------------------------------- |
+ | Protect same name enabled | Allow unique path | Allow unique path and full conflict paths |
+ | Protect same name disabled | Write/Put into the first conflict path | Write/Put into all conflict paths |
+
+:::
+
+## File consistency check
+
+When enabled, the driver will filter out paths where the **size or hash value** differs from other copies during the process of collecting valid paths. This is a safety measure, and whether it is enabled has relatively minor impact. It is recommended to enable this option when using the **Load balancing on a per-part basis** reading policy.
+
+Regardless of whether this option is enabled, the Alias does not actively calculate file hashes. Instead, it performs a best-effort match using the hash values returned by the backend drivers.
+
+Different types of hash values returned by backend drivers will not lead to misjudgment. For example, if Driver 1 returns the MD5 of a file and Driver 2 returns the SHA1 of the file, even with this option enabled, the Alias will not consider either path from Driver 1 or Driver 2 invalid simply because the file's MD5 and SHA1 are not equal.
+
+## The download method to use
+
+When adding **`alias`**, `Web Proxy` and `Webdav Policy` are not modified by default. The storage path filled in the Paths path can be `302`, `Local Proxy`, `Download Proxy URL`, three modes Mixed Playback Mixed Playback is possible.
+
+If you checked `Web Proxy`, the storage filled in by the Paths path, if there is a 302 mode playback, it will be played in transit (local proxy mode) at that time, and it will become a proxy mode. If the Webdav policy is also changed, it will also change.
+
+Of course, it is up to you to choose whether to change the mode.
+
+### What if you don’t know how the cloud disks you added are different?
+
+1. You can go to the bottom of the corresponding document to view the document, there is a flow chart description
+ - If there is a 302, the 302 method is used by default. If there are only local proxy and download proxy URLs, the default is to use the local proxy, provided that you have not manually selected
+2. You can check when adding storage, select the corresponding storage to view, for example, let’s check the methods of Alibaba Cloud and 115 respectively
+ - As you can see from the figure below, Alibaba Cloud Disk has the option of `web proxy`, and `webdav policy` defaults to 302. It can be judged that Alibaba Cloud Disk uses the 302 method by default
+ - As you can see from the figure below, the 115 network disk does not have the option of `web proxy`, and the `webdav strategy` defaults to the local proxy. It can be judged that the 115 network disk uses the local proxy mode by default
+ 
+
+## Proxy Range
+
+You need to enable `Web Proxy` or` Webdav Native Proxy` to take effect. Currently only applicable to:`alias`、`139Yun`、`OpenList V3`.
+
+- The `139Yun` driver, when this option is enabled, can resolve issues that occur when a proxy is enabled but the download link does not return the correct HTTP status code, such as problems with video playback or lack of support for resume downloads.
+- The `Alias` driver is added to meet specific use cases, for example, when `139Yun` uses a 302 redirect. By enabling the `Alias` proxy, downloads can use `139Yun` with the 302 redirect, while video playback can use the proxy-enabled `Alias`, reducing unnecessary load.
+- The `OpenList` driver is added to support server-side OpenList mounting with `139Yun` using a 302 redirect. Locally, OpenList can be mounted via the proxy-enabled `OpenList` to access the server's OpenList for video playback, etc., to avoid consuming server bandwidth. This also allows for data-free video streaming on mobile networks.
+
+## Download concurrency, Download part size
+
+**Storage Settings:**
+
+- Alias (Alias) Drive
+- Local Proxy
+- Path: / Cloud Drive Mount Path
+- Download Concurrency: 10
+- Download Chunk Size: 1024
+
+**Effect:**
+
+- Client → OpenList Alias Drive: Uses 1 connection
+- OpenList Alias Drive → Cloud Drive: Supports 10 concurrent connections, with actual concurrency limited by the cloud drive.
+
+```mermaid
+graph LR
+ A[Client] -->|Connection 1| B[OpenList Alias Drive]
+ B -->|Concurrent Connection 1| C[Cloud Drive]
+ B -->|Concurrent Connection 2| C
+ B -->|Concurrent Connection 3| C
+ B -->|Concurrent Connection 4| C
+ B -->|Concurrent Connection 5| C
+ B -->|Concurrent Connection 6| C
+ B -->|Concurrent Connection 7| C
+ B -->|Concurrent Connection 8| C
+ B -->|Concurrent Connection 9| C
+ B -->|Concurrent Connection 10| C
+```
+
+- Single-threaded speed is slower, but it supports concurrency: Using the alias drive allows concurrent downloads, significantly improving speed.
+- Video watching and download acceleration: The experience is enhanced by increasing concurrency.
+- Copying from alias drive to other drives: File transfer is also accelerated in this case.
+
+**Friendly Reminder:** Please do not abuse this feature. Excessive use may cause abnormal activity on the cloud drive account, and you will bear the consequences.
+
+**Configuration Options:**
+
+- max_concurrency: Sets the maximum concurrency for the local proxy. The default is 64, and setting it to 0 means no limit on concurrency.
+
+## Other instructions
+
+If you are using `Windows`, the following situation will occur, and folders with different capitalization will also be regenerated.
+
+For example, Local 1 and Local 2 have a lowercase v for `video` respectively, and the folder OneDrive has an uppercase V `Video` folder.
+
+Then a lowercase video folder will be generated, which contains only `local 1, local 2` files merged by two folders.
+
+At the same time, the uppercase `Video` will gather the files of the three folders.
+
+This is because Windows is case-insensitive, video and Video will be considered as the same folder, you will not have this problem if you switch to Linux or Mac.
diff --git a/pages/en/guide/drivers/alidoc.md b/pages/en/guide/drivers/alidoc.md
new file mode 100644
index 000000000..a8abe5bbf
--- /dev/null
+++ b/pages/en/guide/drivers/alidoc.md
@@ -0,0 +1,78 @@
+---
+top: 677
+categories:
+ - guide
+ - drivers
+---
+
+# AliDoc
+
+::: danger Please read the notes carefully
+This driver is currently not officially maintained by the project team.
+:::
+
+Mount DingTalk Docs web storage in OpenList.
+
+Official website:
+
+- DingTalk Docs:
+
+This driver uses DingTalk Docs web APIs captured from the browser, not the official open platform API.
+
+::: warning Stability Notice
+
+Because this driver depends on web-side APIs and Cookie authentication, it may fail when DingTalk Docs changes its frontend behavior, request format, or login flow.
+
+Please use it with that risk in mind.
+
+:::
+
+## Supported operations
+
+Currently supported:
+
+- List files and folders
+- Download files
+- Upload files
+- Create folders
+- Move files and folders
+- Copy files and folders
+- Rename files and folders
+- Recycle files and folders
+
+## Cookie
+
+Required. DingTalk Docs web Cookie.
+
+Recommended steps:
+
+1. Open a fresh browser session or incognito window.
+2. Visit and log in to the account you want to mount.
+3. Press `F12` to open developer tools.
+4. Open the `Network` tab and refresh the page.
+5. Search for requests such as `list`, `createfolder`, or other `/box/api/` requests.
+6. Open any one of these requests and find the `Cookie` request header.
+7. Copy the complete Cookie value into OpenList.
+
+::: warning
+Please avoid mixing multiple DingTalk accounts in the same browser environment when obtaining the Cookie.
+:::
+
+## Root folder ID
+
+Required. This is the UUID of the root folder entity used as the mount root.
+
+You can obtain it from DingTalk Docs web requests:
+
+1. Stay on the folder you want to mount as root.
+2. Open developer tools and inspect a `/box/api/v2/dentry/list` request.
+3. Find the `dentryUuid` request parameter.
+4. Use that UUID as `Root folder ID`.
+
+Usually, the personal root folder UUID is also returned in responses such as `spaceProfile.rootDentryUuid`.
+
+## Notes
+
+- This driver depends on Cookie login state. If the Cookie expires, you need to refresh it manually.
+- Upload uses DingTalk Docs web upload flow, including OSS upload and final commit request.
+- Delete currently means moving the file or folder to the recycle bin, not permanent deletion.
diff --git a/pages/en/guide/drivers/aliyundrive_open.md b/pages/en/guide/drivers/aliyundrive_open.md
new file mode 100644
index 000000000..f177b1c18
--- /dev/null
+++ b/pages/en/guide/drivers/aliyundrive_open.md
@@ -0,0 +1,287 @@
+---
+top: 699
+categories:
+ - guide
+ - drivers
+---
+
+# Aliyundrive Open
+
+::: tip
+Aliyundrive Open, developed based on the official authorization API.
+:::
+
+::: danger Read the precautions carefully
+
+1. The refresh token obtained by this tool can only be used for **Aliyundrive open platform** storage mount method.
+2. The token filled in when OpenList is mounted should also be provided by this tool, and the previous acquisition method will not be available
+3. Not applicable to others, but only for OpenList
+4. If the same IP requests max times within minutes, **Too Many Requests** will appear. :no_entry_sign:So please do not abuse:no_entry_sign:
+ - viewing files and watching video downloads are not counted. The number of times and time mentioned above are dynamic~
+ - New optimization: **will only refresh the token when the request finds that the token is expired, update restart editing if the token is still valid will not refresh.**
+5. Online playback video reminder: **`ExceedCapacityForbidden`** error, the capacity exceeds restrictions, needs to be expanded or delete unnecessary files to save space,[View details](#four、)
+6. **Do not share the Alibaba cloud disk publicly, and the account is prohibited from being accessed by multiple IPs. If the account is frozen after sharing, you will be responsible for the consequences. After adding storage, please set up meta information and other measures in time to prevent the account from being frozen by {other people/crawlers} malicious [access/sharing],Other cloud disks also need to be prevented from being frozen/banned.**
+7. It is prohibited to use Alibaba Cloud Disk to build distribution services including but not limited to **`picture bed, software bed`** and **`video external link to video website playback`**, as well as some non-standard usage methods not mentioned above. If you violate the rules and are `frozen/banned`, you will be responsible for the consequences and it cannot be lifted.
+
+:::
+
+## 1. Necessary Conditions
+
+A **AliyunDrive** account is required.
+
+::: warning Notes
+Speed and stability are related to the performance/network of the machine running OpenList and the load on the AliYun Drive server.
+:::
+
+## 2. Preparation for Access
+
+### 2.1. Register an Application on the Open Platform (Optional; no need to create one if using the built-in key pair of OpenList/public welfare server/self-hosted server)
+
+::: tip
+Please register an application according to the requirements of the AliYun Drive Open Platform.
+:::
+
+Open Platform URL:
+
+### 2.2. Obtain Tokens
+
+1. Visit [api.oplist.org](https://api.oplist.org) **⚠️ If using a public welfare server/self-hosted server, visit the address of the public welfare server/self-hosted server.**
+
+2. Select **AliYun Drive App Login** from the drop-down menu.
+
+ 
+
+ 
+
+3. If you are using the built-in key pair of `OpenList (or public welfare server/self-hosted server)` (i.e., you do not have application information from the AliYun Drive Open Platform), configure according to `3.1`, `3.2`, and `3.3`:
+
+ 3.1. Check `Use parameters provided by OpenList`.
+
+ 3.2. Leave both `Client ID (ClientID/AppID)` and `App Secret (AppKey/Secret)` blank.
+
+ 3.3. Click the `Get Token` button.
+
+ 
+
+ 
+
+4. If you are using your own created OAuth client ID and secret, configure according to `4.1`, `4.2`, and `4.3`:
+
+ 4.1. Do not check `Use parameters provided by OpenList`.
+
+ 4.2. Enter your `AppId` in `Client ID` and your `AppSecret` in `App Secret`.
+
+ 4.3. Click the `Get Token` button.
+
+ 
+
+ 
+
+5. In the pop-up window, scan the code to log in to your AliYun Drive.
+
+ 
+
+6. After successful authorization, the page will display your `Access Token` and `Refresh Token`. Please copy and save these two tokens.
+
+ 
+
+ 
+
+## 3. Add AliYun Drive to OpenList
+
+### 3.1. Start Adding
+
+1. Open the OpenList management interface and click `Storage` in the left menu.
+
+2. On the storage list page, click the `Add Storage` button in the upper right corner.
+
+3. Select the driver as `AliYun Drive (Oauth2)`.
+
+4. Enter the mount path, such as `aliyun-drive`.
+
+5. Enter the root folder ID obtained above in `Root Folder ID`. If using the root directory, enter `root`. See [Configuration Instructions/Root Folder ID](#_3-2-1-root-folder-id).
+
+ 
+
+ 
+
+6. Enter the refresh token obtained above in the refresh token field (if not obtained, refer to [Preparation for Access](#_2-preparation-for-access)).
+
+7. If you are using the OAuth client ID and secret provided by `OpenList (or public welfare server/self-hosted server)`, configure according to `6.1`, `6.2`, and `6.3`:
+
+ 6.1. Check `Use online api`.
+
+ 6.2. Leave both `Client ID (ClientID/AppID)` and `App Secret (AppKey/Secret)` blank.
+
+ 6.3. Enter `https://api.oplist.org/alicloud/renewapi` in `Api url address`. If using a `public welfare server/self-hosted server`, enter the corresponding server address.
+
+ 
+
+ 
+
+8. If you are using your own created OAuth client ID and secret, configure according to `7.1`, `7.2`, and `7.3`:
+
+ 7.1. Do not check `Use online api`.
+
+ 7.2. Enter your `AppId` in `Client ID (ClientID/AppID)` and your `AppSecret` in `App Secret (AppKey/Secret)`. See [Configuration Instructions/Client ID, Secret](#_3-2-2-client-id-secret).
+
+ 7.3. Leave `Api url address` blank.
+
+ 
+
+ 
+
+9. In the `Instant Upload` option, select whether to enable the instant upload function (optional). See [Configuration Instructions/Instant Upload](#_3-2-3-instant-upload).
+
+10. In `Removal Method`, select the way to delete files (optional), default is recycle bin. See [Configuration Instructions/Removal Method](#_3-2-4-removal-method).
+
+11. In `Cloud Drive Type`, select the cloud drive type (optional), default is `Default`. See [Configuration Instructions/Cloud Drive Type](#_3-2-5-cloud-drive-type).
+
+12. In `Livp Download Format`, select the format for downloading live photos (optional), default is `Jpeg`. See [Configuration Instructions/Livp Download Format](#_3-2-6-livp-download-format).
+
+13. In `Internal Upload`, select whether to enable internal upload (optional), default is off. See [Configuration Instructions/Internal Upload](#_3-2-7-internal-upload).
+
+14. Click the `Add` button to complete adding AliYun Drive.
+
+### 3.2. Configuration Instructions
+
+#### 3.2.1. Root Folder ID
+
+The default is `root`, displaying all cloud drive contents. If you only want to display contents within a certain folder, change it to `file_id`.
+
+Open the AliYun Drive official website, and when clicking into the folder to be set, click the string after the URL.
+
+For example, https://www.alipan.com/drive/folder/5fe01e1830601baf774e4827a9fb8fb2b5bf7940
+
+The file_id of this folder is `5fe01e1830601baf774e4827a9fb8fb2b5bf7940`.
+
+
+
+#### 3.2.2. Client ID, Secret
+
+Normal users can leave it blank. If you have applied for official authorization, you can fill in your own. When blank, it defaults to using those provided by OpenList.
+
+- If using your own developer account, the Oauth token link must also be modified, and you must use your own developer account ID and secret to obtain the refresh token.
+
+#### 3.2.3. Instant Upload
+
+- **Version v.3.22.1** new feature.
+
+ Instant upload requires enabling `Instant Upload` when mounting. The prerequisite for instant upload is that the file already exists in AliYun Drive; otherwise, it will be a normal upload.
+
+ Instant upload calculates the file's `sha1` value (should be correct) without requiring you to calculate it. You just need to upload, and it will automatically calculate after upload completion.
+
+- It uses the interface provided by AliYun Drive's official API. For details, see :point_right: [**Instant Upload Logic**](https://www.yuque.com/aliyundrive/zpfszx/ezlzok#y7lyH).
+
+---
+
+- **Version v.3.27.0** enhances instant upload: files can be instantly transferred between `115 Network Disk` and AliYun Drive by direct copying.
+ - Prerequisite: To instantly transfer a file from AliYun Drive to 115, the file must already exist in 115; otherwise, it will be a normal copy task.
+ - If instantly transferring a file from 115 to AliYun Drive, enable the instant upload option for AliYun Drive; otherwise, it will be a normal upload.
+ It is recommended to locally deploy an OpenList on your home computer, add a `local storage` and `AliYun Drive`, and use copy instant upload to save resources.
+
+#### 3.2.4. Removal Method
+
+If not set, it defaults to deleting to the recycle bin. If space is insufficient, you need to manually clean the recycle bin. If a file is deleted by mistake, please go to the AliYun Drive official website client to retrieve it.
+
+- **Recycle Bin**: Deleting in OpenList will move the file to the network disk recycle bin, occupying cloud drive space, but it can be retrieved later if deleted by mistake.
+- **Delete**: Direct deletion without staying in the recycle bin, not occupying cloud drive space, but cannot be retrieved later if deleted by mistake.
+ - Note: Do not leak the Token obtained from AliYun Drive Open. If leaked by mistake, please immediately:
+ - **Open AliYun Drive app → My → Settings gear icon in the upper right corner → Privacy Settings → Authorization Management → Click OpenList to view and revoke authorization**.
+ - Then rescan the code to authorize for a new refresh token. Revoking authorization will invalidate all previously obtained tokens to protect your account security.
+
+#### 3.2.5. Cloud Drive Type
+
+You can select the cloud drive type according to your needs. When adding a driver using OpenList version v3.25.1 and above, the default selection is `Default`.
+
+- **Default**: For users with a talent level, it defaults to displaying `non-backup file` content; for users without a talent level, it defaults to displaying `backup file` content.
+- **Resource Library**: Corresponding to the `non-backup file content` of the cloud drive.
+- **Backup Disk**: Corresponding to the `backup files` of the cloud drive.
+ After AliYun Drive updated to version `6.0` in July 2024, the backup disk was changed to merge backup files and all files, but in terms of OpenAPI, it still distinguishes between `Resource Library` and `Backup Disk` types.
+ 
+
+#### 3.2.6. Livp Download Format
+
+That is, iOS `live` photos cannot be parsed by non-iOS systems, so they cannot be downloaded. Now, you can choose `Jpeg` or `Mov` according to your needs.
+
+- Jpeg: The cover of the `live` photo.
+- Mov: The video frame of the `live` photo when long-pressed.
+
+#### 3.2.7. Internal Upload
+
+If the server where OpenList is deployed is an AliYun ECS in the Beijing region, turning on this switch can improve file upload speed. Do not turn on this switch for servers that do not meet the requirements, otherwise, upload failures will occur.
+
+- Can `Internal Upload` be used on non-Beijing AliYun ECS? No, because AliYun Drive uses object storage in the Beijing region.
+
+## 4. Other Instructions
+
+### 4.1. Permission Scope
+
+OpenList only obtains cloud drive user (**name, avatar ¹**), (**file access permission ²**), and (**file write permission ³**), without obtaining phone number permission.
+
+Details can be viewed in the following two ways:
+
+1. The **prompt** when scanning the code to obtain the refresh token.
+2. Open **AliYun Drive app → My → Settings gear icon in the upper right corner → Privacy Settings → Authorization Management → Click OpenList** to view.
+ - You can manually revoke permissions at any time if not in use.
+
+### 4.2. About Video Playback
+
+The default player is AliYun Drive's built-in player - **Aliyun Video Previewer**.
+Videos uploaded to the cloud drive will be transcoded into H.264-encoded video streams through the transcoding service. (The benefit is that iOS can play them... Well, it should be like this.)
+
+- For newly uploaded videos, only the first 30s of the video is pre-transcoded by default. The first play will trigger full video transcoding. The transcoded video will be cached, and no retranscoding is needed for subsequent plays.
+- Videos shorter than 30s will not trigger pre-transcoding, and transcoding will only start when played for the first time.
+- Real-time transcoding takes some time.
+- Video qualities are: LD|SD|HD|FHD|QHD.
+
+### 4.3. Inability to View Office Suite Files
+
+> Q: Why can't Office suite files be viewed in AliYun Drive Open?
+>
+> A: ~~Because AliYun Drive has not opened the relevant API, so it cannot be viewed temporarily~~ (Stay tuned.)
+
+### 4.4. Subtitle Loading
+
+Q: How to load subtitles?
+
+A: AliYun Drive Open needs to use the **Aliyun Video Previewer** player, and currently only supports transcoding srt and vtt text format subtitles encapsulated in mkv.
+
+- Currently, only three languages are supported: eng, jpn, chi. Other languages will be lost.
+
+### 4.5. Common Issues
+
+1. ExceedCapacityForbidden
+
+ Q: When playing AliYun Drive videos online, it cannot play and prompts the error: **`ExceedCapacityForbidden`**.
+
+ A: **The user's capacity is exceeded**, restricting playback. You need to expand the capacity or delete unnecessary files to free up space
+ - In OpenList, it prompts: `ExceedCapacity Forbidden: Execeed Capactity Forbidden`.
+ - In AliYun Drive, it prompts: `云盘可用空间不足` (Insufficient available space in cloud drive).
+
+2. Transcoding in progress, please try again later.
+
+ Q: When viewing a video in AliYun Drive, it prompts `Transcoding in progress, please try again later`, and when mounting in OpenList, it prompts: `failed link: failed get link: UserNotAllowedAccessResource: user not allowed access resource for violation`.
+
+ A: It means the account has been frozen (previously, it was directly unable to log in). For specific situations, please check the red content notes at the top.
+
+## 5. The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/autoindex.md b/pages/en/guide/drivers/autoindex.md
new file mode 100644
index 000000000..73c115381
--- /dev/null
+++ b/pages/en/guide/drivers/autoindex.md
@@ -0,0 +1,79 @@
+---
+top: 350
+categories:
+ - guide
+ - drivers
+---
+
+# AutoIndex
+
+The AutoIndex driver is used to mount directory index pages built into HTTP servers, such as the [Nginx Source Index](https://nginx.org/download/) and [Redis Releases](https://download.redis.io/releases/).
+
+This driver essentially scrapes page information directly and requires manually specifying XPaths, making it suitable for scraping pages that are not directory index pages as well.
+
+## Setup Instructions
+
+- **URL:** The website address. If no scheme is included, `https://` will be automatically added. To mount a subpath, append it directly to the end of the URL. For example, can be used to mount the subpath `tomcat/` under . Required.
+- **Entry XPath:** An XPath expression used to match each entry node in the file list. The result of this expression must be a **node-set**, where each node corresponds to a file entry. Required.
+- **Filename XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the filename. The result can be a node, node-set, or string. If the result is a node or node-set, the innerText of the first node will be used as the filename. Required.
+- **Modification time XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the file modification time. The result can be a node, node-set, or string. If the result is a node or node-set, the innerText of the first node will be used as the modification time string. Optional. If left blank, no node is matched, or the date format is unrecognizable, the current time will be used by default.
+- **File size XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the file size. The result can be a node, node-set, number, or string. If the result is a node or node-set, the innerText of the first node will be parsed as the file size. Optional. If left blank, no node is matched, or the content cannot be recognized as a valid size, the driver will return a file size of 0.
+- **Ignore filenames:** Used to filter out entries that should not be crawled (e.g., list headers, parent directory links). Enter the filenames to ignore (without the trailing `/`).
+- **Modification date format:** Enter a time string matching the format displayed on the page (refer to the Go time template: `Mon Jan 2 15:04:05 -0700 MST 2006`, see also: [Go Time Formatting Documentation](https://golang.org/pkg/time/#pkg-constants)).
+
+## Reference Configuration
+
+The following configurations can be used to mount the auto-index pages of some HTTP servers. Since the style of auto-index pages may change with updates to the HTTP server version, the configurations provided below are for reference only and are not guaranteed to work across all versions. You are welcome to supplement available configurations for other HTTP servers in the comments.
+
+#### Nginx (Tested on 1.29.0)
+
+- Entry XPath: `//pre/a`
+- Filename XPath: `.`
+- Modification time XPath: `substring(normalize-space(./following-sibling::text()[1]),1,17)`
+- File size XPath: `substring(normalize-space(./following-sibling::text()[1]),19)`
+- Modification date format: `02-Jan-2006 15:04`
+
+#### Apache httpd (Tested on 2.4.18)
+
+- Entry XPath: `//table/tbody/tr[position() > 2]`
+- Filename XPath: `./td[2]/a`
+- Modification time XPath: `./td[3]`
+- File size XPath: `./td[4]`
+- Modification date format: `2006-01-02 15:04`
+
+#### Caddy (Tested on v2.10.2)
+
+- Entry XPath: `//table/tbody/tr`
+- Filename XPath: `./td[2]/a/span`
+- Modification time XPath: `./td[4]/time`
+- File size XPath: `./td[3]/div/div[2]`
+- Modification date format: `01/02/2006 03:04:05 PM -07:00`
+
+#### Python SimpleHTTP (Tested on 3.11.5-0.6)
+
+- Entry XPath: `//ul/li`
+- Filename XPath: `./a`
+- Modification time XPath: leave blank
+- File size XPath: leave blank
+- Modification date format: leave blank
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/baidu.md b/pages/en/guide/drivers/baidu.md
new file mode 100644
index 000000000..fbea8cf78
--- /dev/null
+++ b/pages/en/guide/drivers/baidu.md
@@ -0,0 +1,266 @@
+---
+top: 690
+categories:
+ - guide
+ - drivers
+---
+
+# Baidu Netdisk
+
+::: tip
+Due to the limitation of Baidu Disk API, downloading files larger than about 20M needs to carry the header: "User-Agent": "pan.baidu.com", so when downloading files larger than 20M, you need to set the request header yourself, such as using curl:
+
+```bash
+curl -L -X GET 'YOUR_LINK' -H 'User-Agent: pan.baidu.com'
+```
+
+Or use the proxy function in this program to transfer.
+:::
+
+```mermaid
+---
+title: How to Stream from Baidu Cloud?
+---
+flowchart TB
+ a[(Baidu Cloud)]
+ 1[Official API]
+ b[Super VIP]
+ c[Modify UA]
+ d[Can Modify UA]
+ e[Cannot Modify UA]
+ f[Local Proxy]
+ g[High Bandwidth]
+ k[Low Bandwidth, Cannot Handle]
+ l[Can Stream]
+ m[End]
+
+ a ==> 1
+ 1 ==> b
+ b ==> c
+ b -.-> m
+ c ==> d
+ c -.-> e
+ d ==> l
+ e ==> f
+ f ==> g
+ f -.-> k
+ g ==> l
+ k ==> m
+ click c,e,d,m "#Add-User-Agent-Example"
+```
+
+## Refresh token
+
+**Currently, there are three methods to obtain a Baidu Netdisk refresh token:**
+
+All methods require you to [click here](https://api.oplist.org/) to obtain the refresh token. The **first method** requires developer permissions, while the **latter two** do not.
+
+1. If you have Baidu Netdisk developer permissions, please select **"Baidu Netdisk Auth Login"**, and in the Baidu Netdisk developer app backend, set the callback URL to the one provided on the webpage. After clicking "Get Token," you will automatically receive a refresh token. You can then configure your own `client_id` and `client_secret` in OpenList.
+
+ (Please note: If using Baidu Netdisk's API, ensure the “Use Online API” option is unchecked, otherwise it will prevent connection.)
+
+ 
+
+ Want to obtain developer permissions? Please follow the steps below to apply for developer permissions on Baidu Cloud Open Platform:
+
+ (Please note that we do not advocate the abuse of Baidu Netdisk developer permissions. You need to bear the operational risks yourself.)
+ 1. Please go to [Baidu Open Platform](https://pan.baidu.com/union).
+
+ 
+
+ 2. Log in to your Baidu account.
+
+ {width=200px}
+
+ 3. Follow the steps to complete the developer certification (supplement account information, such as real-name authentication, email, etc.).
+
+ 4. After completion, the system will automatically redirect to the [Baidu Open Platform Console](https://pan.baidu.com/union/console/applist).
+
+ If you cannot access the console, you may not have completed the certification. Please return to step one and try again.
+
+ {width=600px}
+
+ 5. Create an application using the create button in the console.
+
+ (Please note that individual developers can only create one application. If you have other uses for the application, please use methods two and three. Here we assume you don't have an application and are willing to create one for OpenList.)
+
+ {width=600px}
+
+ 6. Select "Software" as the application category, and fill in the application name and description according to your preference. Please note that these three contents cannot be changed once set, so please think carefully before filling them out.
+
+ {width=600px}
+
+ 7. After creation is complete, you'll return to the control panel. Click on the application name to enter the application details page.
+
+ (Please note that you don't need to apply for online review to use it normally.)
+
+ {width=200px}
+
+ 8. Select Security Settings and fill in the application callback URL with the provided callback address and save.
+
+ {width=600px}
+
+ ```
+ https://api.oplist.org/baiduyun/callback
+ ```
+
+ {width=600px}
+
+ 9. Return to the application details page and copy the necessary AppKey and SecretKey.
+
+ 10. Use the [OpenList Token Acquisition Tool](https://api.oplist.org/) to log in via Baidu Netdisk authentication and fill in the corresponding keys to obtain the token.
+
+ 11. Fill in the corresponding parameters and settings according to the image at the beginning of this method to start using it.
+
+2. This method uses a built-in API call via our intermediary server to refresh the access token. It is already available online. Simply check the option to use the parameters provided by OpenList, click "Get Token," and you will receive a refresh token. In the storage configuration page of OpenList, enable the "Use Online API" option, and enter the refresh token to start using it.
+
+ 
+
+ The basic principle of the online API is illustrated in the diagram below:
+
+ 
+
+3. If you do not have Baidu Netdisk developer permissions but somehow have access to an app’s `client_id` and `client_secret`, please select **"Baidu Netdisk OOB Authentication"**. By default, this method uses the client parameters from the "ES File Explorer" app, but you can also input your own `client_id` and `client_secret`. After clicking "Get Token," wait patiently as you are redirected to the Baidu authorization page. Log in and authorize the app, then copy the authorization code and return to the original webpage to input the code as instructed to obtain the refresh token. In the storage configuration page of OpenList, fill in the `client_id` and `client_secret` to start using the service.
+
+ 
+
+## Root folder path
+
+The root foler to mount, defaults to `/`
+
+- Mount a folder separately, according to the following format, `/` is the root directory, just extend to that directory if you want to mount that directory
+ - /folder_A/....../folder_x
+
+## ~~**Custom crack ua**~~
+
+~~[**UA used when using 【Native Proxy & Crack API】**](https://github.com/alist-org/alist/issues/5602#issuecomment-1831188682)~~ The unofficial interface is no longer available
+
+## Download api
+
+- **Official:** The official interface, very stable, but for larger files, UA needs to be modified and the speed is slow (SVIP speed fast)
+- **Crack:** unofficial interface,**Seems to be no longer available** ~~You must modify the UA and some files may not have a speed limit, but it will be unstable (not guaranteed 100%availability) Need to use a version greater than `3.19.0`~~
+ - ~~Need to change the UA to`netdisk`,Modification method refer to [add-user-agent-user-example](#add-user-agent-usage-example)~~
+ - ~~Or turn on the Web proxy, you do not need to modify the UA (you need a large broadband to use it stably)~~
+ - ~~It is limited to play/download **`video (only tested in the mp4 format other formats are not tested)`**,If it is other format files, such a prompt will appear~~
+ - ~~This is not a mistake, this is a limit, please do not panic.~~
+- **Crack video:** unofficial video interface, dedicated to playing videos, the following errors will occur in non-video formats, which is normal
+ - The browser also needs to modify the UA: `pan.baidu.com` or `netdisk` In short, if it is not the browser User-Agent, the video can be played.
+ - The specific situation is the same as the previous unofficial interface usage
+ - The continuous use time is unknown, and 100% availability is not guaranteed
+
+ ```json{2-4,7-9}
+ {
+ error_code: 31119,
+ error_msg: "hit black userlist , hit illeage dlna",
+ request_id: 541111111111111140
+ },
+ {
+ error_code: 31329,
+ error_msg: "hit black userlist , hit illeage dlna",
+ request_id: 921111381111111100
+ }
+ ```
+
+## Add "User-Agent" usage example
+
+::: danger If you don't know how to set "User-Agent" see here
+The following methods are limited to Baidu super member users
+
+Prompt again The following methods are limited to Baidu super member users
+
+It will only be useful if a member finishes modifying **`"User-Agent"`** (choose official and 302)
+
+If you don’t change **`"User-Agent"`**, you can enable=Web Agent, the disadvantage is that you need to build an OpenList machine for transfer, that is to say, you need a large broadband to help you transfer
+:::
+
+
+
+ Tutorial on how to modify UA in web page 302 mode
+
+
+
+
Official
+
+
+
+
Crack video (unavailable)
+
+
+
+
+
+### Web plugin
+
+The advantage of using a browser plug-in to modify is that it can be played directly online, of course, downloading is also possible.
+
+Example 1: If you really don’t know it, you can take a look at an example on the web page: **https://www.bilibili.com/video/BV1UA4y1X7J8**
+
+Example 2: Another plugin method covering 360, Chrome, Edge: **https://youtu.be/PP6b0WSzYMc**
+
+
+
+### Aria2
+
+1. First follow the figure below to set the **`user-agent" `**, and then click the button option in the lower right corner, click ** gear ** (local settings) to configure the parameters well
+
+ 
+
+2. Then open the third button option in the lower right corner (**Open the check box**), and then go to the list to select the file we want to download
+
+3. Select the files we need to download. After selecting, there will be a row of buttons. Select the second option on the right. One is sent to Aria2.
+
+ If you use the webpage to modify the **`user-agent`**, you do not need to configure the `UA` of **Aria2**, and you can download it directly to Aria2
+
+### Motrix
+
+1. First follow the figure below to set the **`user-agent" `**, and then click the button option in the lower right corner, click ** gear ** (local settings) to configure the parameters well
+
+ 
+
+2. Then open the third button option in the lower right corner (**Open the check box**), and then go to the list to select the file we want to download
+
+3. Select the files we need to download. After selecting, there will be a row of buttons. Select the second option on the right. One is sent to Aria2.
+
+ If you use the webpage to modify the **`user-agent`**, you do not need to configure the `UA` of **Motrix**, and you can download it directly to Aria2
+
+- Motrix Download link:[Motrix Official website](https://motrix.app/),[Motrix-GitHub](https://github.com/agalwood/Motrix)
+
+## Upload Config
+
+Official Documentation: [百度网盘开放平台 - 上传 - 能力说明](https://pan.baidu.com/union/doc/3ksg0s9ye)
+
+> ~~Baidu Netdisk requires that each slice be uploaded within 30 seconds, so excessively high concurrency during file uploads may result in a significant number of failures.~~
+> Currently (November 2025), Baidu Netdisk appears to have significantly relaxed the timeout limit for uploading slices.
+> Tests show that uploading single slice is now allowed to exceed 30 minutes.
+> Therefore, after extending the timeout duration, the failure rate for batch uploading large files should be greatly reduced (even if low upload bandwidth).
+
+- Upload Threads: The number of slices to upload concurrently.
+- Upload API: The domain endpoint used for uploading.
+- Use dynamic upload API: Dynamically fetch upload domain, generally can achieve maximum upload speed. When enabled, the `Upload API` setting will be used as a fallback if failed to get online. This is enabled by default.
+- Custom Upload Slice Size: Allows you to specify the size of each slice. Note that there are limitations, and this feature is available to VIPs only.
+- Low Bandwidth Upload Mode: Attempts to address the frequent `Client.Timeout exceeded while awaiting headers` errors encountered in low upload bandwidth scenarios (e.g., residential broadband). When enabled, it uses the smallest possible slice size.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[local proxy]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[302]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/baidu_photo.md b/pages/en/guide/drivers/baidu_photo.md
new file mode 100644
index 000000000..fc168e3bc
--- /dev/null
+++ b/pages/en/guide/drivers/baidu_photo.md
@@ -0,0 +1,60 @@
+---
+top: 689
+categories:
+ - guide
+ - drivers
+---
+
+# Baidu Photo
+
+
+
+## Cookie
+
+Log in to [Baidu Photo](https://photo.baidu.com), open F12, and find any request containing the `Cookie` value. Copy it.
+
+
+
+## Album ID
+
+**When left blank, all albums in the root directory are displayed by default.**
+
+If you want to mount a single album, fill in the following:
+
+- The **Album ID** should be: {album_id}|{tid}
+ Example: `4021858707431029901|316519298447849660`
+ - **{album_id}**: After entering the album you want to mount, check the top URL for the ID after `/album`. This is the **{album_id}**.
+ - Example: [https://photo.baidu.com/photo/web/album/4021858707431029901](https://photo.baidu.com/photo/web/album/4021858707431029901)
+ - **4021858707431029901** is the **{album_id}**
+
+ - **{tid}**: Access [this link](https://photo.baidu.com/youai/album/v1/list?limit=1000) to obtain the **{tid}**
+ - Once on the page, press `Ctrl+F` and search for the ID above. A few lines below you’ll find the corresponding **{tid}**.
+
+## Display Type
+
+Choose according to your needs.
+
+## Delete Source Files
+
+By default, it only removes the album, not permanently deletes the files. If you enable this option, the files will be permanently deleted after removal. Be cautious when enabling this.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/chaoxing.md b/pages/en/guide/drivers/chaoxing.md
new file mode 100644
index 000000000..0c7d6a18f
--- /dev/null
+++ b/pages/en/guide/drivers/chaoxing.md
@@ -0,0 +1,51 @@
+---
+top: 678
+categories:
+ - guide
+ - drivers
+---
+
+# ChaoxingxingGroupCloud
+
+
+
+chaoxingxing group cloud is also affiliated with chaoxingxing. After logging in to chaoxingxing, you can see a group under the left sidebar.
+
+Official website link:**https://i.chaoxing.com**
+
+### Username Password
+
+chaoxingxing account and password
+
+### Bbsid
+
+Follow the example process below to obtain
+
+
+
+### Root Folder ID
+
+The default is `-1`. For other subfolder ID acquisition methods, see the example below.
+
+- Search the keyword `getResourceList` in the request. For convenience, we can directly search `list` and see it. Then we enter the folder we need to mount. After entering the folder, we can find the `folder id by looking at the request.`
+
+ 
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/chunk.md b/pages/en/guide/drivers/chunk.md
new file mode 100644
index 000000000..19bfcfbb2
--- /dev/null
+++ b/pages/en/guide/drivers/chunk.md
@@ -0,0 +1,113 @@
+---
+top: 995
+categories:
+ - guide
+ - drivers
+---
+
+# Chunk
+
+The Chunk is used to split large files into multiple file chunks. Each chunk is stored as an independent file on the backend driver.
+
+The size of each file chunk can be manually configured by the user. Except for the last chunk of each file—which is smaller than the configured size—all other chunks are always equal to the specified size.
+
+A chunked file is stored as a folder on the backend driver, containing all its chunks.
+
+
+
+## Setup Instructions
+
+- **Remote path:** The real storage path of the chunked files. This path must be the root path or a subpath of another driver.
+- **Part size:** Maximum chunk size / Size of chunks except the last, in bytes.
+- **Chunk large file only:** Whether to only chunk files larger than Part size.
+ - When disabled:
+ 
+ - When enabled:
+ 
+- **Chunk prefix:** The prefix for the names of chunk folders stored on the backend driver, representing a chunked file. This is used to identify whether a folder is a regular folder or a chunked file storing folder, and therefore cannot be empty.
+- **Custom ext:** Custom suffix for chunk names, used to bypass limitations of certain drivers.
+ - When left empty:
+ - When setting to `.jpg`:
+
+::: warning TIP
+Once the driver is created, Custom ext should not be modified again, otherwise previously uploaded chunked files will become unrecognizable.
+
+If modification is necessary, you must manually change the suffix of all chunks on the backend driver afterward.
+:::
+
+- **Store hash:** Whether to store the hashes of chunked files in the chunk folder as well.
+ This feature does not actively compute hashes; it only stores the hashes that the file already carries when uploading.
+- **Num list workers:** When handling `List` requests, if a folder contains chunk folders, it is necessary to further list those chunk folders to retrieve information such as file size and hash value. Using multiple threads can speed up this process. A higher number of threads consumes more CPU and bandwidth resources but also increases speed. It is recommended to be disabled (set to 1) when the backend driver has API rate limiting.
+
+## Use in combination with Crypt
+
+If you need to both chunk and encrypt files, it is recommended to **encrypt first, then chunk**. Specifically, set Remote path of the [Crypt](/en/guide/drivers/crypt) driver to the mount path of the **Chunk** driver, and set Remote path of the **Chunk** driver to the actual storage path of the files.
+
+- Best practice:
+
+```mermaid
+graph LR
+ File[Upload stream] --> Crypt
+ Crypt --> Chunk
+ Chunk -->|chunk1| Backend[Backend driver]
+ Chunk -->|chunk2| Backend
+ Chunk -->|chunk3| Backend
+```
+
+- Bad practice:
+
+```mermaid
+graph LR
+ File[Upload stream] --> Chunk
+ Chunk -->|chunk1| Crypt1[Encryption algorithm]
+ Chunk -->|chunk2| Crypt2[Encryption algorithm]
+ Chunk -->|chunk3| Crypt3[Encryption algorithm]
+ Crypt1 -->|encrypted chunk 1| Backend[Backend driver]
+ Crypt2 -->|encrypted chunk 2| Backend
+ Crypt3 -->|encrypted chunk 3| Backend
+ subgraph Crypt
+ Crypt1
+ Crypt2
+ Crypt3
+ end
+```
+
+**Reason**: The bad practice involves storing a series of encryption metadata in each file chunk, which consumes more space. It also fails to guarantee that the chunks adhere to the user-specified maximum size, thereby undermining the purpose of file chunking.
+
+To perform emergency recovery on an encrypted file chunked according to the best practice, you simply need to concatenate all the chunks in order and then proceed with recovery.
+
+## Use in combination with Alias
+
+If you need to store chunked files across multiple load-balanced drivers, you can combine this with the [Alias](/en/guide/drivers/alias) driver. For details, refer to [Load Balancing / Load balancing by file chunks](/en/guide/advanced/balance#load-balancing-by-file-chunks).
+
+It's important to note that, unlike the approach used with Crypt, when combining with Alias, the process should be **chunk first, then load balance**. This means setting the Remote path of the **Chunk** driver to the mount path of the **Alias** driver, and setting the paths within the **Alias** driver to the actual file storage paths.
+
+- Best Practice:
+
+```mermaid
+graph LR
+ File[Upload Stream] -->|File1| Chunk
+ File -->|File2| Chunk
+ Chunk -->|File1 Block1, File1 Block2, File1 Block3| Alias
+ Chunk -->|File2 Block1, File2 Block2| Alias
+ Alias -->|File1 Block3| D1[Backend Driver 1]
+ Alias -->|File1 Block2| D2[Backend Driver 2]
+ Alias -->|File1 Block1| D3[Backend Driver 3]
+ Alias -->|File2 Block1| D1
+ Alias -->|File2 Block2| D3
+```
+
+- Bad Practice:
+
+```mermaid
+graph LR
+ File[Upload Stream] -->|File1| Alias
+ File -->|File2| Alias
+ Alias -->|File1| Chunk1[Chunk 1]
+ Alias -->|File2| Chunk2[Chunk 2]
+ Chunk1 -->|File1 Block1| D1[Backend Driver 1]
+ Chunk1 -->|File1 Block2| D1
+ Chunk1 -->|File1 Block3| D1
+ Chunk2 -->|File2 Block1| D2[Backend Driver 2]
+ Chunk2 -->|File2 Block2| D2
+```
diff --git a/pages/en/guide/drivers/cloudflare-imgbed.md b/pages/en/guide/drivers/cloudflare-imgbed.md
new file mode 100644
index 000000000..f5a8d92a1
--- /dev/null
+++ b/pages/en/guide/drivers/cloudflare-imgbed.md
@@ -0,0 +1,83 @@
+---
+top: 700
+categories:
+ - guide
+ - drivers
+---
+
+# CloudFlare-ImgBed
+
+
+
+## Disclaimer
+
+::: warning
+This driver only provides an interface to interact with the CloudFlare-ImgBed backend and is not responsible for the availability and stability of the image hosting program itself or its storage channels.
+Users are solely responsible for determining and configuring the storage channels used (e.g., Cloudflare R2, HuggingFace, S3, Telegram) and must strictly comply with the Terms of Service and acceptable use policies of the relevant platforms and service providers. Do not use this driver for any illegal activities, rights infringement, or abuse of platform resources (e.g., excessive consumption of free quotas, illegal storage/distribution of copyrighted content).
+All consequences arising from improper configuration, violation of platform policies, or service abuse (including but not limited to account suspension, data loss, service interruption, etc.) shall be borne by the user. OpenList and its developers shall not be held liable.
+:::
+
+## 1. Preparation
+
+Before configuring this driver, you need to deploy your own CloudFlare-ImgBed backend.
+Project address: [MarSeventh/CloudFlare-ImgBed](https://github.com/MarSeventh/CloudFlare-ImgBed)
+After deployment, log in to the backend dashboard (`https://your-domain/dashboard`), and ensure that at least one storage channel (e.g., HuggingFace, Cloudflare R2, S3, Telegram) is configured in the system settings.
+
+## 2. Add in OpenList
+
+### Mount Path
+
+Enter the path you want to mount to, for example `/imgbed`.
+
+### Root Folder Path
+
+Default is `/`, can be left empty.
+
+### Address
+
+Enter the address of your deployed image hosting service, e.g., `https://img.example.com`. No need to add `/` at the end.
+
+### Token
+
+Enter the API Token generated in the backend system settings.
+
+
+### Small Channel Name
+
+Typically used for uploading files smaller than 20MB. Enter the channel name configured in your backend (e.g., `my cfr2`, `my telegram`).
+
+### Large Channel Name
+
+Used for uploading files larger than 20MB. It is recommended to configure a channel that supports large files (e.g., `huggingface`). If left blank, large files will fall back to the small channel for upload.
+
+### Large Channel Type
+
+Select the corresponding type based on your large file channel:
+
+- `huggingface`: Uses HuggingFace LFS direct upload (supports instant upload and chunking)
+- `telegram` / `cfr2` / `s3` / `discord`: Uses the backend chunked upload API
+
+### Upload Thread
+
+Concurrent thread count for HuggingFace chunked direct upload, default is `3`, max is `32`. Can be increased if network conditions are good.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/cloudreve.md b/pages/en/guide/drivers/cloudreve.md
new file mode 100644
index 000000000..e2efc2db2
--- /dev/null
+++ b/pages/en/guide/drivers/cloudreve.md
@@ -0,0 +1,72 @@
+---
+top: 498
+categories:
+ - guide
+ - drivers
+---
+
+# Cloudreve V3
+
+## Parameters
+
+### Address
+
+The address of the Cloudreve V3 server, such as: `https://www.example.com`. It is better to remove the slash `/` after it.
+
+### Authentication
+
+Cloudreve V3 supports authentication using Cookie. The mounting authentication methods are divided into:
+
+1. `Username` + `Password`: Automatically uses the login interface to obtain Cookie, there might be issues with CAPTCHA.
+2. `Cookie` Only: Can be temporarily used but will expire and cannot be renewed. Parameters can be found from browser requests or Local Storage.
+3. [Reference](../drivers/common.html#Reference): Fill in `ref:/{mount path}` in `Remark`: Reference authentication, tokens, etc., from "Mounted Storage".
+
+::: tip Steps to get cookie:
+Only the string following cloudreve-session= is required.
+:::
+
+
+
+### Root Folder Path
+
+Default is `/`, which can be obtained from the `?path=` in the web link. The obtained parameters may need to be [URL decoded](https://www.google.com/search?q=URL+decode).
+
+### Enable Folder Size
+
+Enable Cloudreve V3 server to calculate the size of each folder and generate thumbnails for each file. Enabling this feature may cause server errors or slow performance, and it is `disabled` by default.
+
+### Custom UA
+
+Used to customize the `User-Agent` header information used in requests. Leaving it blank will use OpenList default settings.
+
+## Upload
+
+The supported storage policies for uploading are as follows:
+
+- Local storage
+- Slave storage
+- OneDrive
+- S3
+
+Upload storage policies can be set within Cloudreve V4 web interface by entering the corresponding folder (requires the server to be Cloudreve Pro).
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/cloudreve_v4.md b/pages/en/guide/drivers/cloudreve_v4.md
new file mode 100644
index 000000000..6cac42195
--- /dev/null
+++ b/pages/en/guide/drivers/cloudreve_v4.md
@@ -0,0 +1,116 @@
+---
+top: 497
+categories:
+ - guide
+ - drivers
+---
+
+# Cloudreve V4 / Share
+
+## Parameter Explanation
+
+### Address
+
+The address of the Cloudreve V4 server, such as: `https://www.example.com`. It is better to remove the slash `/` after it.
+
+### Authentication
+
+Cloudreve V4 supports authentication using Token. The mounting authentication methods are divided into:
+
+1. `Username` + `Password`: Automatically uses the login interface to obtain Access Token and Refresh Token, there might be issues with CAPTCHA.
+2. `Refresh Token` Only: Automatically uses the refresh interface to renew Access Token and Refresh Token, parameters can be found from browser requests or Local Storage.
+3. `Access Token` Only: Can be temporarily used but will expire and cannot be renewed.
+4. None: Anonymous user, suitable for public sharing.
+5. [Reference](../drivers/common.html#reference): Fill in `ref:/{mount path}` in `Remark`: Reference authentication, tokens, etc., from "Mounted Storage".
+
+### Steps to get tokens
+
+#### From Local Storage
+
+::: tip
+There may be multiple sessions; please select the one you want to mount.
+:::
+
+
+
+#### From Network
+
+::: tip
+You may need to log in anew to see this request.
+:::
+
+
+
+### Root Folder Path
+
+Cloudreve V4 uses a custom URI as the path, which can be obtained from the `?path=` in the web link. The obtained parameters may need to be [URL decoded](https://www.google.com/search?q=URL+decode).
+
+#### Mounting My Files
+
+Default is `cloudreve://my/`, listing user files.
+
+#### Mounting Share
+
+Supports mounting folder-type shares, the path should be filled as: `cloudreve://{ShareID}@share/`.
+
+- ShareID is the parameter after `/s/` in the share link.
+- Currently, Cloudreve V4 does not support creating password-protected shares. However, if the data is migrated from V3, the previously created sharing password will be retained. The URI of the share link with the password (`/s/{shareID}/{sharePassword}`) is `cloudreve://{shareID}:{sharePassword}@share`.
+
+### Enable Folder Size
+
+Enable Cloudreve V4 server to calculate the size of each folder. Enabling this feature may cause server errors or slow performance, and it is `disabled` by default.
+
+### Enable Thumbnails
+
+Enable Cloudreve V4 server to generate thumbnails for each file. Enabling this feature may cause server errors or slow performance, and it is `disabled` by default.
+
+### Enable Version Upload
+
+Enable overwrite upload and keep the previous version, which consumes extra space. Disabled by default, delete the existing file before overwriting upload.
+
+### Custom UA
+
+Used to customize the `User-Agent` header information used in requests. Leaving it blank will use OpenList default settings.
+
+### Sorting
+
+Supports changing the sorting parameters when requesting lists.
+
+### Hide files currently being uploaded
+
+Filter files with upload sessions (in progress) based on metadata information, size 0, unable to download
+
+## Upload
+
+The supported storage policies for uploading are as follows:
+
+- Local storage
+- Slave storage
+- OneDrive
+- S3
+- KS3
+
+Upload storage policies can be set within Cloudreve V4 web interface by entering the corresponding folder (requires the server to be Cloudreve Pro).
+
+If upload permissions are enabled for shares, uploads are supported. It requires the server to check "Enhance anonymous user permissions" for the user group (requires the server to be Cloudreve Pro).
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/cnb_releases.md b/pages/en/guide/drivers/cnb_releases.md
new file mode 100644
index 000000000..78e12ad61
--- /dev/null
+++ b/pages/en/guide/drivers/cnb_releases.md
@@ -0,0 +1,61 @@
+---
+categories:
+ - guide
+ - drivers
+top: 397
+---
+
+# CNB Releases
+
+https://cnb.cool/
+
+## Known issues
+
+CNB releases are not a standard file system and have some unresolved issues. Please do not submit feedback for these.
+
+1. An empty repository needs to be initialized first.
+2. Subdirectories are not supported under Tag / Release directories.
+3. The OpenAPI upload returns `expires_in_sec` as only 10 seconds. Uploading large files may time out; after time out, the upload continues but returns `invalid token`. Therefore, a local timeout mechanism is added to automatically stop uploading when the set time is reached, avoiding failed uploads and wasted bandwidth.
+4. `Move`, `Copy`, and `Rename` operations are not supported.
+5. Only when `UseTagName` is disabled, renaming can be done by modifying the Release name.
+
+## Parameters
+
+### Repo
+
+Only one repository can be specified. To reuse a token, please use the [Reference](common.md#reference) feature.
+
+### Token
+
+Access token. No need to include `Bearer`. Supports the [Reference](common.md#reference) feature.
+
+How to obtain: After logging in, go to `Personal Settings` - [Access Token](https://cnb.cool/profile/token) -> `Add Access Token`.
+
+For listing, grant the `repo-code:r` permission. For modifications, grant the `repo-code:rw` permission.
+
+### UseTagName
+
+Use the original Tag name instead of the Release name.
+
+By default, this is disabled and the Release name is used, which supports renaming. Tag names cannot be changed once created. When creating a new folder for the first time, a Tag with the folder name will be published. Renaming an existing Release will modify the Release name.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/common.md b/pages/en/guide/drivers/common.md
new file mode 100644
index 000000000..ce63d7b79
--- /dev/null
+++ b/pages/en/guide/drivers/common.md
@@ -0,0 +1,207 @@
+---
+top: 1000
+categories:
+ - guide
+ - drivers
+---
+
+# Common
+
+## Mount Path
+
+The unique identifier for the mount point, the name displayed externally, and the location where it should be mounted. If you want to mount it to the root directory, please enter `/`.
+
+
+
+
+
+::: danger
+You cannot use duplicate mount path names, otherwise, the following error will occur:
+
+```json
+Failed to create storage in database: UNIQUE constraint failed: x_storages.mount_path
+```
+
+Solution: Use [aliases](./alias.md) to aggregate multiple mount points.
+:::
+
+::: danger
+The mount path name is a required field and cannot be left empty, or the following error will occur:
+
+```json
+Key: 'Storage.MountPath' Error: Field validation for 'MountPath' failed on the 'required' tag
+```
+
+Solution: If you want to mount to the root directory, please enter `/`.
+:::
+
+## Order
+
+When mounting multiple drives, this is used for sorting. The smaller the number, the further to the front. Negative numbers can also be used.
+
+## Remark
+
+You can add notes for easier management.
+
+### Reference
+
+Reference authentication, tokens, etc., from the **"Mounted Storage"** to enable sharing the same token between multiple cloud drives.
+
+Currently, the following cloud drives are supported:
+
+- 139Yun
+- AliyundriveOpen
+- 189CloudPC
+- 123PanShare(ref 123Pan)
+- Cloudreve V3 / V4
+
+**How to use**: In the storage settings, set the first line of **Remark** to: **ref:/mount_path**
+
+**Important**: `ref:/` should be in lowercase letters and symbols.
+
+
+
+## Enable signing
+
+Sign and encrypt files (no password required), only valid for this driver, if other signatures are not enabled and `signature all` and `meta-information encryption` are not set, others will not be signed.
+
+Usage scenario: I don't want to enable all signatures, and I don't want to set metadata encryption. I just want to sign and encrypt a certain driver to prevent it from being scanned.
+
+Scope of influence: `Settings-->Global-->Signature All` > `Metainformation Directory Encryption` > `Single Driver Signature`.
+
+## Disable index
+
+Allow users to disable storage indexing.
+
+- For example, if you enable `Ignore Index` in the index options, you no longer need to configure it after enabling `Disable Index`, which is more convenient.
+
+## Cache Expiration
+
+Cache time of directory structure.
+
+## Custom Cache Policies
+
+Cache time for directory paths (in minutes).
+
+You can customize the cache time for specific file paths using pattern matching. The configuration supports wildcard patterns:
+
+- `*` matches a **single** directory level.
+- `**` matches **multiple** directory levels.
+
+Example configuration:
+
+```txt
+/Series/Completed/*:60
+/Series/Updating/*/**:10
+/Series/Archived/**:30
+```
+
+Explanation:
+
+- `*` matches only a single directory level. Items directly under `/Series/Completed` will be cached for 60 minutes. This does **not** include deeper subdirectories — for example, `/Series/Completed/A/B` will not match this rule.
+- `**` matches multiple directory levels. Therefore, the contents of subdirectories under `/Series/Updating` will be cached for 10 minutes. For example, `/Series/Updating/A/B` and `/Series/Updating/C/D` will match.
+- The pattern `/Series/Updating/*/**` enforces a “single level followed by multi-level” match. As a result, directories directly under `/Series/Updating` will **not** be matched by this rule.
+- All contents under `/Series/Archived` (including any depth of subdirectories) will be cached for 30 minutes.
+
+## Web proxy
+
+Whether the web preview,download and the direct link go through the transfer. If you open this, recommended you set [site_url](../../configuration/configuration.md#site-url) so that OpenList can works fine.
+
+::: tip
+
+- **Web proxy Strategies:** It is a strategy when using the webpage. The default is a local agent. If you fill in the proxy URL and enable the web agent to use the proxy URL
+- **Webdav policy Strategies:** It is an option to use the webdav function
+ - If there are 302 options default to 302, if there is no 302 option default to the local agent, if you want to use the agent URL, please fill in and manually switch to the proxy URL strategy
+
+The two are different configurations.
+
+:::
+
+## Webdav policy
+
+- **302 redirect:** redirect to the real link
+ - Although it does not consume traffic, it is not recommended to share and use it.
+- **use proxy URL:** redirect to proxy URL
+ - It will consume the traffic of the agent URL
+- **native proxy:** return data directly through local transit(best compatibility)
+ - The traffic of the construction of OpenList device will consume
+
+### Description of three modes
+
+```mermaid
+---
+title: 302 redirect, use proxy URL, native proxy
+---
+flowchart LR
+ E(User operation OpenList calls API triggers related API operations Cloud Drive Cloud Drive receives command and begins execution)
+ A[(Cloud Drive)]
+ B(You)
+ C[Use proxy URL]
+ D{Native proxy}
+ E==>A==>E
+ A==>|Directly transferring from cloud drive to you without any loss 302 downloads as fast as possible|B
+ A-->|Send the cloud disk to the use proxy URL first|C-->|After being forwarded to you by the proxy URL, your download speed depends on the speed of downloading, forwarding, and forwarding on the other end of the proxy URL|B
+ A-->|Send the cloud drive to the device running OpenList first|D-->|After being forwarded to you by the device running OpenList, your download speed depends on the speed of downloading, uploading, and forwarding on the end where OpenList is built|B
+```
+
+## Download proxy URL
+
+When the proxy is turned on without filling in this field, the local machine will be used for transfer by default.
+
+### 1. Cloudflare Workers
+
+Here’s the translation:
+
+You can use Cloudflare Workers as a proxy. Simply fill in your Cloudflare Workers address here.
+
+The code to set up Workers can be found at [https://github.com/OpenListTeam/OpenList-Proxy/blob/main/openlist-proxy.js](https://github.com/OpenListTeam/OpenList-Proxy/blob/main/openlist-proxy.js). When using it, you need to replace the following variables:
+
+- `ADDRESS`: Your OpenList address, which must include the protocol header and should not end with a `/`. For example, `https://pan.example.com`.
+
+- `TOKEN`: The [Token](../../configuration/other.md#token) of the admin account, which can be found in the “Other Settings” section of the OpenList admin page.
+
+- `WORKER_ADDRESS`: Your Worker address, which is usually the same as the **Download Proxy URL**.
+
+ :warning: Cloudflare Workers free CDN support is only compatible with **http80** and **https443** ports (whether domestic or international), as tested by group members.
+
+When filling in the **Download Proxy URL** in the OpenList backend configuration, the link should not end with a `/`.
+
+Detailed text tutorial:
+
+### 2. Universal Binary
+
+You can use another machine as a proxy. Download the program from https://github.com/OpenListTeam/OpenList-Proxy/releases and check the usage instructions with `./openlist-proxy -help`.
+
+Detailed text tutorial:
+
+### 3. Developing on your own
+
+You can develop your own proxy program. The general steps are as follows:
+
+- When downloading, it will request `PROXY_URL/path?sign=sign_value`.
+- In the proxy program, validate the `sign`. The calculation method for `sign` is:
+
+```js
+const to_sign = `${path}:${expireTimeStamp}`
+const _sign = safeBase64(hmac_sha256(to_sign, TOKEN))
+const sign = `${_sign}:${expireTimeStamp}`
+```
+
+`TOKEN` is the [Token](../../configuration/other.md#token) of the administrator account, which can be obtained in the “Other Settings” section of the OpenList management page.
+
+- After validating the signature, request `HOST/api/fs/link` to obtain the file URL and the request headers to include.
+- Use the information to make the request and handle the response.
+
+## Sort related
+
+- **Sort by**: Sort by what
+- **Sort direction**: Whether the sort direction is ascending or descending
+
+::: info
+Some drives use their own sorting method, which may be different.
+:::
+
+## Extract folder
+
+- **Extract to front**: put all folders to the front when sorting
+- **Extract to back**: put all folders to the back when sorting
diff --git a/pages/en/guide/drivers/crypt.md b/pages/en/guide/drivers/crypt.md
new file mode 100644
index 000000000..d4df34c89
--- /dev/null
+++ b/pages/en/guide/drivers/crypt.md
@@ -0,0 +1,222 @@
+---
+top: 996
+categories:
+ - guide
+ - drivers
+---
+
+# Crypt
+
+The Crypt driver provides secure encryption for your files and folders, acting as a two-password-protected vault. Only users with the correct password and salt can access the encrypted content.
+
+**Key Features:**
+
+- File and folder encryption with multiple security levels
+- Password and salt-based protection
+- Compatible with rclone crypt
+- Supports various encryption modes for filenames and directories
+
+::: warning Important Security Notice
+
+1. Read this guide thoroughly before using the Crypt driver
+2. Test the configuration in a local environment before production deployment
+3. **Never modify the configuration after storing encrypted data** - this will make data lost
+4. Keep your password and salt values secure - losing them means losing access to your data
+
+Again, please read the documentation carefully; otherwise, any data loss will be at your own risk!
+:::
+
+## Setup Instructions
+
+1. **Create Storage Location**
+
+ Create an **empty folder** in your existing mounted drive to store encrypted files.
+
+2. **Configure Remote Path**
+
+ Enter the path of the empty folder in the `Remote path` field of your Crypt driver configuration.
+
+ **Example Configuration:**
+ - Original driver path: `/123`
+ - New empty folder: `/123/encrypted_storage`
+ - Remote path setting: `/123/encrypted_storage`
+
+3. **Upload Files**
+
+ Upload files to the newly created Crypt driver mount point. Only files uploaded through the Crypt driver will be encrypted.
+
+ **File Access:**
+ - **Encrypted files**: Located in the remote path, appear scrambled and cannot be opened directly
+ - **Decrypted access**: View and access files normally through the Crypt driver mount point
+
+### Basic Configuration Example
+
+For users new to encryption, use the following default configuration:
+
+
+
+::: danger Please make sure to read the following important notes carefully to ensure understanding!
+
+**Important Declaration:**
+
+- **Do not modify the configuration! Do not modify the configuration! Do not modify the configuration!** Once the configuration is saved, do not modify it again!!! This is repeated for emphasis!
+- **Password** and **Salt** must be remembered! After clicking save, they will be encrypted and cannot be displayed in plain text (the plain text in the image shows the state before saving).
+
+> [**Password Configuration Instructions**](#password)
+>
+> [**Salt Configuration Instructions**](#salt)
+
+---
+
+- **If you have not yet uploaded files within the Crypt driver**, you can modify the password and configuration. **Otherwise, do not modify!**
+- After modifying the configuration, Crypt will attempt to filter illegal files/directories, but illegal data will not be automatically deleted.
+ - **Illegal files/directories** refer to encrypted data generated with a different configuration.
+
+:::
+
+::: warning
+Regarding encryption combinations, there are 5 options available (actually 6), but it’s important to note that if only folder encryption is enabled without encrypting the file names, the configuration will not take effect (as shown in the first example below).
+
+| Filename Encryption | Directory Encryption | Status |
+| ------------------- | -------------------- | ---------- |
+| `Off` | `Enabled` | ❌ Invalid |
+| `Off` | `Disabled` | ✅ Valid |
+| `Standard` | `Disabled` | ✅ Valid |
+| `Standard` | `Enabled` | ✅ Valid |
+| `Obfuscate` | `Disabled` | ✅ Valid |
+| `Obfuscate` | `Enabled` | ✅ Valid |
+
+:::
+
+## Configuration Options
+
+### Filename Encryption
+
+**Default:** `Disabled`
+
+**Available Options:**
+
+| Mode | Security Level | Description |
+| ----------- | -------------- | ----------------------------------------------------------------------------- |
+| `Off` | None | Files keep original names with encrypted suffix (e.g., `file.txt.bin`) |
+| `Standard` | High | **Recommended** - Strong encryption with good security |
+| `Obfuscate` | Low | Simple obfuscation, supports long filenames but may create special characters |
+
+---
+
+In the image below, the left side shows file **name encryption** and folder **name encryption** enabled, while the right side shows the decrypted Crypt driver where files can be viewed.
+
+- **File name encryption not enabled**: Original name + encrypted suffix, as shown in the top left corner
+- **File name encryption enabled**: Fully encrypted file name, content cannot be recognized, as shown in the bottom left corner
+
+
+
+### Directory Name Encryption
+
+**Default:** `Disabled`
+
+Directory encryption requires filename encryption to be enabled. When activated, folder names are also encrypted for enhanced security.
+
+**Configuration Combinations:**
+
+| Filename Encryption | Directory Encryption | Status |
+| ------------------- | -------------------- | ---------- |
+| `Off` | `Enabled` | ❌ Invalid |
+| `Off` | `Disabled` | ✅ Valid |
+| `Standard` | `Disabled` | ✅ Valid |
+| `Standard` | `Enabled` | ✅ Valid |
+| `Obfuscate` | `Disabled` | ✅ Valid |
+| `Obfuscate` | `Enabled` | ✅ Valid |
+
+### Remote Path
+
+The storage location for encrypted files. Can be any mountable drive supported by OpenList.
+
+### Security Parameters
+
+::: danger
+After saving the configuration, both password and salt values are encrypted and cannot be displayed in plain text. Store them securely in a separate location.
+:::
+
+#### Password
+
+::: warning
+Note that passwords exported using `rclone config` are obfuscated and cannot be used directly. Please prefix the password with `___Obfuscated___` before use.
+For example, if the exported password is `abc123xyz`, it should be entered as `___Obfuscated___abc123xyz` in the Crypt driver.
+:::
+
+Primary encryption key. **Must be remembered** - cannot be recovered if lost.
+
+#### Salt
+
+::: warning
+Note that salts exported using `rclone config` are obfuscated and cannot be used directly. Please prefix the salt with `___Obfuscated___` before use.
+For example, if the exported salt is `abc123xyz`, it should be entered as `___Obfuscated___abc123xyz` in the Crypt driver.
+:::
+
+Secondary encryption key, acts as an additional password layer. **Must be remembered** - cannot be recovered if lost.
+
+If you don't know what is salt, treat it as a second password. Optional but recommended
+
+### Advanced Options
+
+#### Encrypted Suffix
+
+**Default:** `.bin`
+
+Custom suffix for encrypted files (only used when filename encryption is disabled). Must start with a dot (e.g., `.abc`, `.encrypted`).
+
+#### Filename Encoding
+
+**Default:** `base64`
+
+**Warning:** Only modify if you understand the implications. Other encoding options are not thoroughly tested and may cause compatibility issues.
+
+For rclone compatibility, configure this setting in advanced options.
+
+## Advanced Usage
+
+### Rclone Compatibility
+
+The Crypt driver is fully compatible with [rclone crypt](https://rclone.org/crypt).
+
+**Important Notes:**
+
+- OpenList Crypt uses `filename_encoding = base64` by default for better long filename support, configure this setting in advanced options when using with rclone
+- Case-insensitive filesystems (e.g., Windows with local storage) may cause issues
+
+## Troubleshooting
+
+### Startup Errors
+
+If Crypt shows errors during OpenList startup, it's likely because Crypt starts before its target path is available.
+
+**Solution:** Set a higher [order number](./common.md#order) for the Crypt driver to delay its initialization.
+
+### Data Access Issues
+
+If you cannot access previously encrypted data:
+
+1. Verify that the password and salt values are correct
+2. Ensure the configuration hasn't been modified
+3. Check that the remote path is accessible
+4. Confirm the filename encoding setting matches your original configuration
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/degoo.md b/pages/en/guide/drivers/degoo.md
new file mode 100644
index 000000000..76b707b06
--- /dev/null
+++ b/pages/en/guide/drivers/degoo.md
@@ -0,0 +1,55 @@
+---
+categories:
+ - guide
+ - drivers
+top: 587
+---
+
+# Degoo
+
+https://degoo.com/
+
+**Authentication methods**:
+
+1. Username + Password
+2. Refresh Token
+3. Access Token
+
+In normal cases, you can log in with your username + password. If you encounter a 429 error, you can log in using tokens. You can obtain the token from the request body or header in your browser.
+
+## Username
+
+Your user's name.
+
+## Password
+
+Your user's password.
+
+## Refresh Token
+
+Refresh token for automatic token renewal, obtained automatically.
+
+## Access Token
+
+Access token for Degoo API, obtained automatically.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/develop.md b/pages/en/guide/drivers/develop.md
new file mode 100644
index 000000000..6ff2c1a8e
--- /dev/null
+++ b/pages/en/guide/drivers/develop.md
@@ -0,0 +1,11 @@
+---
+top: 100
+categories:
+ - guide
+ - drivers
+---
+
+# Contribute new storage driver
+
+Duplicate `drivers/template` to expand the new storage. Please read [CONTRIBUTING](https://github.com/OpenListTeam/OpenList/blob/main/CONTRIBUTING.md) for details.
+The design of the driver part of OpenList is easy to expand, no need to modify other files, just create a new package under the back-end project drivers package and reference this package in the `all.go` file.
diff --git a/pages/en/guide/drivers/doubao.md b/pages/en/guide/drivers/doubao.md
new file mode 100644
index 000000000..d9b34312b
--- /dev/null
+++ b/pages/en/guide/drivers/doubao.md
@@ -0,0 +1,58 @@
+---
+top: 676
+categories:
+ - guide
+ - drivers
+---
+
+# Doubao Drive
+
+
+
+Mount [Doubao Drive](https://www.doubao.com/chat/drive/) cloud storage.
+
+::: danger Security Risk
+
+Do not use 302 if the storage is public accessible.
+Otherwise, the download link may leak sensitive information such as access token or signature.
+Others may use the leaked link to **access all your files**.
+
+:::
+
+## Root folder ID
+
+The root folder ID is the parameter value displayed in the address bar when accessing Doubao Drive via a web page. For example, after accessing [Doubao Drive](https://www.doubao.com/chat/drive/), the address bar shows `https://www.doubao.com/chat/drive/AAAAAAAAAAAAAAAAAAAAAAAAAA?tab=myUpload`, where `AAAAAAAAAAAAAAAAAAAAAAAAAA` is the root folder ID.
+
+
+
+## Cookie
+
+Required. Web cookie. Used to refresh token and extract Authorization/DPoP tokens.
+
+Open browser developer tools, visit [Doubao Drive](https://www.doubao.com/drive/), log in to your account, check the `Network` tab, search for `biz_auth` and open it, find `Cookie` in the `Header`, copy the complete value and fill it in.
+
+
+
+OpenList will automatically extract other attributes from the Cookie. Please ensure that the Cookie contains the following key-value pairs:
+
+- `LARK_SUITE_DPOP`
+- `LARK_SUITE_ACCESS_TOKEN`
+- `feishu_dpop_keypair` (used for key generation, optional)
+
+## App ID
+
+必填,Doubao's App ID. The App ID may vary for different clients, please refer to the actual value.
+
+## DPoP Key Secret, Auth Client ID, Auth Scope, Auth SDK Source, Auth SDK Version
+
+Optional, for Token refresh. Please obtain it yourself, and refer to the actual value.
+
+## Share Link
+
+Whether to use share link for download. If enabled, OpenList will create share and request with anonymous user's token to create download link. This can reduce authorization leak.
+
+Please ensure you have filled all authentication options above before enabling this function.
+
+## Ignore JWT Check
+
+Whether to ignore JWT check to prevent time issue
diff --git a/pages/en/guide/drivers/dropbox.md b/pages/en/guide/drivers/dropbox.md
new file mode 100644
index 000000000..481156524
--- /dev/null
+++ b/pages/en/guide/drivers/dropbox.md
@@ -0,0 +1,119 @@
+---
+top: 590
+categories:
+ - guide
+ - drivers
+---
+
+# Dropbox
+
+Dropbox Official:https://www.dropbox.com/
+
+## Get refresh token
+
+- **This drive does not support the online API mode provided by OpenList.**
+
+- The following tutorial applies when the option is kept disabled as shown below.
+
+ 
+
+- If you create your own `Client ID` and `Secret`, remember to authorize them.
+
+The steps are as follows:
+
+1. First, [click here](https://www.dropbox.com/developers/apps?_tk=pilot_lp&_ad=topbar4&_camp=myapps) to enter the Dropbox app management page and click "Create App".
+
+ 
+
+2. After entering the app, configure the app type as shown below.
+
+ 
+
+3. You can get the id and secret in the red box: the upper one is the id, the lower one is the secret.
+
+ 
+
+4. Configure the callback URL. If you are strict about permissions and do not want to use an external callback address, you can set a local address here, or use the one outside the red box.
+
+ 
+
+5. Finally, go to the permissions configuration page to set the app's permissions.
+
+ 
+
+6. [Click here](https://api.oplist.org/) to enter the token acquisition tool. Select Dropbox, fill in your id and secret, and after authorization you can get the refresh token.
+
+7. In the OpenList configuration page, enter the refresh token, id, and secret to use. Note that the refresh token is about 40-50 characters long.
+
+
+
+If you are highly privacy-conscious, Dropbox supports local callback. You can use the following script provided by GPT to quickly implement it, communicating only with Dropbox servers.
+
+::: warning
+Since the callback address is local and you have not set up a real local callback server, please manually copy the authorization code from the browser address bar.
+
+**Please resolve Python environment issues yourself, or use the callback server provided above.**
+:::
+
+```python
+import requests
+import webbrowser
+# Please replace with your own Dropbox App information
+CLIENT_ID = 'your_app_key'
+CLIENT_SECRET = 'your_app_secret'
+REDIRECT_URI = 'http://localhost:114514'
+# Step 1: Get authorization code
+auth_url = (
+ f"https://www.dropbox.com/oauth2/authorize"
+ f"?client_id={CLIENT_ID}"
+ f"&redirect_uri={REDIRECT_URI}"
+ f"&response_type=code"
+ f"&token_access_type=offline" # Required: key parameter to get refresh_token
+)
+print("👉 Please visit the following link to authorize:\n")
+print(auth_url)
+webbrowser.open(auth_url)
+auth_code = input("\n✅ After authorization, paste the code after ?code= in the redirected URL here:\n> ").strip()
+# Step 2: Exchange for access_token + refresh_token
+token_url = "https://api.dropboxapi.com/oauth2/token"
+data = {
+ 'code': auth_code,
+ 'grant_type': 'authorization_code',
+ 'client_id': CLIENT_ID,
+ 'client_secret': CLIENT_SECRET,
+ 'redirect_uri': REDIRECT_URI
+}
+response = requests.post(token_url, data=data)
+response.raise_for_status()
+tokens = response.json()
+# ✅ Only output the refresh token
+print("\n🎉 Success! Your Dropbox refresh_token is:\n")
+print(tokens.get("refresh_token"))
+```
+
+## Root folder file_id
+
+**Empty is the root directory**:display all files
+**Single folder ID**:Enter the folder you need to display, copy the top link to fill in `/home` behind
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/emby.md b/pages/en/guide/drivers/emby.md
new file mode 100644
index 000000000..434ac4215
--- /dev/null
+++ b/pages/en/guide/drivers/emby.md
@@ -0,0 +1,54 @@
+---
+top: 493
+categories:
+ - guide
+ - drivers
+---
+
+# Emby
+
+Mount media resources from an Emby server.
+
+## URL
+
+Emby server address, for example: `http://127.0.0.1:8086`.
+
+## ApiKey
+
+Emby API Key. Use together with `UserID` for API authentication.
+
+## UserID
+
+Emby user ID. Used with `ApiKey`.
+
+## Username
+
+Emby account username. Used with `Password`.
+
+## Password
+
+Emby account password. Used with `Username`.
+
+## LinkMethod
+
+Choose link method:
+
+- `stream`: Streaming link (recommended)
+- `download`: Direct download link
+
+Some Emby servers do not grant download permission. In that case, please use `stream`.
+
+## Authentication Method
+
+Use **one** of the following login methods:
+
+1. `ApiKey + UserID`
+2. `Username + Password`
+
+Do not mix both methods at the same time.
+
+## Example Configuration
+
+- URL: `http://127.0.0.1:8086`
+- LinkMethod: `stream`
+- Authentication: choose one method only
diff --git a/pages/en/guide/drivers/febbox.md b/pages/en/guide/drivers/febbox.md
new file mode 100644
index 000000000..5e725220d
--- /dev/null
+++ b/pages/en/guide/drivers/febbox.md
@@ -0,0 +1,57 @@
+---
+top: 591
+categories:
+ - guide
+ - drivers
+---
+
+# FebBox
+
+FebBox:https://www.febbox.com
+
+- The upload function is currently unavailable.
+
+## Root folder ID
+
+Root directory ID, default is `0`.
+
+Other directory IDs can be viewed in the top link address bar after entering the folder.
+
+- **https://www.febbox.com/console#/files?parent_id=66889900**
+
+ Then the directory ID is `66889900`
+
+## `Client_id`、`Client_secret`
+
+Generate address:**https://www.febbox.com/open/clients**
+
+- The generated client ID and secret key are filled in in the opposite order to the OpenList, so be careful not to fill them in incorrectly.
+
+ 
+
+## User IP
+
+**Optional**, the IP address of the user when downloading, quoting the official description
+
+> IP address, Optional parameter. Supports IPv6 format. After filling in, the best download server suitable for the IP location will be selected. If not filled in, the requested IP will be used.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/feiji.md b/pages/en/guide/drivers/feiji.md
new file mode 100644
index 000000000..63989cb5a
--- /dev/null
+++ b/pages/en/guide/drivers/feiji.md
@@ -0,0 +1,50 @@
+---
+top: 686
+categories:
+ - guide
+ - drivers
+---
+
+# FeiJi Cloud
+
+**https://feijipan.com/**
+
+
+
+::: danger
+Feiji Cloud imposes login restrictions on 3rd-party platforms. Attempting to access its service via OpenList may result in your account being banned. Please proceed with caution!
+:::
+
+## Root folder ID
+
+root folder ID the default is `0`,Other directory ID View the figure below obtaining method
+
+
+## username、password
+
+Just fill in your own Feiji Cloud Account Password
+
+## Known issues
+
+The file size returned by iLanZou is in Kilo Bytes, not Bytes. Therefore, you cannot accurately determine if a file has been modified based on its size. Please pay attention to the configuration of your sync software.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/ftp.md b/pages/en/guide/drivers/ftp.md
new file mode 100644
index 000000000..d4aefa2af
--- /dev/null
+++ b/pages/en/guide/drivers/ftp.md
@@ -0,0 +1,47 @@
+---
+top: 898
+categories:
+ - guide
+ - drivers
+---
+
+# FTP
+
+### Address
+
+FTP address, need contains port.
+
+### Username
+
+FTP username
+
+### Password
+
+FTP password
+
+### Root folder path
+
+root folder , default `/`, same as local storage.
+
+## Enter directory before listing
+
+Whether to change into the target directory before listing files. Some FTP servers do not support listing files with a path argument directly. Enable this option to first `cd` into the directory and then `ls`, which can resolve such compatibility issues. Default: `false`.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/github.md b/pages/en/guide/drivers/github.md
new file mode 100644
index 000000000..587366ca6
--- /dev/null
+++ b/pages/en/guide/drivers/github.md
@@ -0,0 +1,125 @@
+---
+top: 399
+categories:
+ - guide
+ - drivers
+---
+
+# GitHub API
+
+::: tip
+GitHub API does not support operating files larger than 100MiB and folders containing more than 100,000 sub-items.
+
+All `.gitkeep` files will be managed by the driver and will be invisible to the user.
+
+Operations on submodules are currently not supported.
+:::
+
+## Token
+
+1. Log in GitHub and visit .
+
+2. Select `Generate new token (Classic)`
+
+ 
+
+3. Fill the information. At least, select **repo**. And click `Generate token`.
+
+ 
+
+4. Copy the token and paste it into the `Token` field.
+
+ 
+
+## Owner
+
+The owner of the repository. For example, if the URL of the repository is `github.com/AAA/BBB`, fill in `AAA` here.
+
+## Repo
+
+The name of the repository. For example, if the URL of the repository is `github.com/AAA/BBB`, fill in `BBB` here.
+
+## Ref
+
+A branch, a tag or a commit SHA. Only when a branch name is filled in is the driver writable. It defaults to the default branch if not filled.
+
+## Gh Proxy
+
+Used to speed up downloading
+
+- Download the content of `Raw` and `archive` and change it to `https://gh-proxy.com/raw.githubusercontent.com`
+
+```
+https://gh-proxy.com/raw.githubusercontent.com
+```
+
+```
+https://ghfast.top/raw.githubusercontent.com
+```
+
+```
+https://ghproxy.net/raw.githubusercontent.com
+```
+
+## GPG private key
+
+GPG private key, used to provide commit verifications. Verified commits will be marked with a green "Verified" label on the GitHub webpage. Use the following command to obtain it. Leave blank if verifications are not needed.
+
+```bash
+gpg --export-secret-key -a
+```
+
+## GPG key passphrase
+
+Passphrase to the GPG private key. Leave blank if there is none.
+
+## Committer name
+
+Custom committer name, defaulting to the owner's of the token when not filled.
+
+## Committer email
+
+Custom committer name, defaulting to the owner's of the token when not filled.
+Required when "Committer name" is filled. Required to be empty when "Committer name" is empty.
+
+## Author name
+
+Custom author name, defaulting to the owner's of the token when not filled.
+
+## Author email
+
+Custom author name, defaulting to the owner's of the token when not filled.
+Required when "Author name" is filled. Required to be empty when "Author name" is empty.
+
+## commit message
+
+Custom commit message, supporting the following template variables:
+
+- `UserName`: the user operating the file.
+- `ObjName`: the name of the file (or the folder) operated.
+- `ObjPath`: the path to the file (or the folder) operated.
+- `ParentName`: the name of the parent folder of the file (or the folder) operated.
+- `ParentPath`: the path to the parent folder of the file (or the folder) operated.
+- `TargetName`: (when renaming) new name. (when copying and moving) the target folder name.
+- `TargetPath`: (when renaming) new path. (when copying and moving) the target path.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/github_releases.md b/pages/en/guide/drivers/github_releases.md
new file mode 100644
index 000000000..4eda6ee0f
--- /dev/null
+++ b/pages/en/guide/drivers/github_releases.md
@@ -0,0 +1,202 @@
+---
+top: 398
+categories:
+ - guide
+ - drivers
+---
+
+# GitHub Releases
+
+## Overview
+
+GitHub Releases driver allows you to mount GitHub repository releases as a file system, enabling direct access to release assets through a familiar directory structure.
+
+## API Rate Limits
+
+::: warning Rate Limits
+
+- **Unauthenticated requests**: 60 requests per hour
+- **Authenticated requests** (with token): 5,000 requests per hour
+
+We recommend using a personal access token to avoid hitting rate limits.
+:::
+
+## Repository Configuration
+
+### Basic Usage
+
+**Single Repository Mount**
+
+Mount a single repository to the root directory:
+
+```text
+OpenListTeam/OpenList
+```
+
+This is equivalent to:
+
+```text
+/:OpenListTeam/OpenList
+```
+
+### Multiple Repositories
+
+**Mount to Subdirectories**
+
+You can mount multiple repositories to different subdirectories:
+
+```text
+/openlist-gh:OpenListTeam/OpenList
+/openlist-frontend-gh:OpenListTeam/OpenList-Frontend
+```
+
+The leading `/` is optional:
+
+```text
+openlist-gh:OpenListTeam/OpenList
+openlist-frontend-gh:OpenListTeam/OpenList-Frontend
+```
+
+## Configuration Options
+
+### Personal Access Token
+
+**When to use:**
+
+- Required for accessing private repositories
+- Recommended to avoid rate limiting issues
+
+**How to get:**
+
+1. Log in to GitHub
+2. Visit: https://github.com/settings/tokens
+3. Generate a new token with appropriate permissions
+
+### Show All Versions
+
+**Disabled (default):**
+
+```
+openlist/
+├── openlist-linux-amd64.tar.gz
+└── openlist-windows-amd64.zip
+```
+
+**Enabled:**
+
+```
+openlist/
+├── v3.41.0/
+│ ├── openlist-linux-amd64.tar.gz
+│ └── openlist-windows-amd64.zip
+├── v3.40.0/
+│ ├── openlist-linux-amd64.tar.gz
+│ └── openlist-windows-amd64.zip
+└── v3.39.4/
+ ├── openlist-linux-amd64.tar.gz
+ └── openlist-windows-amd64.zip
+```
+
+When enabled, all available release versions are displayed in separate directories.
+
+### Pagination Control (Show All Versions)
+
+When "Show All Versions" is enabled, you can control the number of releases fetched via pagination:
+
+- **`per_page`**: Number of releases per page (default: `30`, max: `100`)
+- **`max_page`**: Maximum number of pages to fetch (`0` means unlimited)
+
+These settings help you avoid hitting API rate limits when repositories have a large number of releases.
+
+**Example:**
+
+To fetch at most 2 pages with 50 releases per page (up to 100 releases total):
+
+```text
+per_page = 50
+max_page = 2
+```
+
+::: tip
+A single unauthenticated request counts as 1 toward the 60 requests/hour limit. With `per_page=100` and `max_page=1`, fetching releases for a single repository costs only 1 request.
+:::
+
+### Show README Files
+
+**Disabled (default):**
+
+```
+openlist/
+├── openlist-linux-amd64.tar.gz
+└── openlist-windows-amd64.zip
+```
+
+**Enabled:**
+
+```
+openlist/
+├── v3.41.0/
+│ ├── openlist-linux-amd64.tar.gz
+│ └── openlist-windows-amd64.zip
+├── v3.40.0/
+│ ├── openlist-linux-amd64.tar.gz
+│ └── openlist-windows-amd64.zip
+├── LICENSE
+├── README.md
+└── README_cn.md
+```
+
+::: tip
+When enabled, README and LICENSE files from the repository are displayed alongside releases. However, folder size and modification time information will not be shown.
+:::
+
+## GitHub Proxy Settings
+
+Use GitHub proxy services to accelerate downloads in regions with limited GitHub access.
+
+**Configuration:**
+Replace the GitHub domain with a proxy service URL:
+
+```text
+https://gh-proxy.com/https://github.com
+```
+
+**Available Proxy Services:**
+
+| Service | URL |
+| ----------- | ----------------------------------------- |
+| GH-Proxy | `https://gh-proxy.com/https://github.com` |
+| GHProxy.net | `https://ghproxy.net/https://github.com` |
+| GHFast | `https://ghfast.top/https://github.com` |
+
+Example:
+
+```
+Before: https://github.com/owner/repo/releases/download/v1.0/file.zip
+After: https://ghproxy.net/https://github.com/owner/repo/releases/download/v1.0/file.zip
+```
+
+::: warning
+Proxy services are third-party and may have varying availability and performance.
+:::
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/google_drive.md b/pages/en/guide/drivers/google_drive.md
new file mode 100644
index 000000000..00787d815
--- /dev/null
+++ b/pages/en/guide/drivers/google_drive.md
@@ -0,0 +1,179 @@
+---
+top: 597
+categories:
+ - guide
+ - drivers
+---
+
+# Google Drive
+
+Official website: https://drive.google.com/
+
+- Supports Team Drive (Enter the Team Drive directory ID for the Root Folder ID)
+
+## 1. Prerequisites
+
+1. The machine on which the OpenList service is deployed must be able to connect to Google Drive.
+
+2. The Google Drive API service must be enabled. For details on how to enable it, please refer to [Enabling the Google Drive API](#_2-1-enable-google-drive-api).
+
+ > For detailed steps, see [Google Workspace > Google Drive > Quick Start Guide](https://developers.google.com/workspace/drive/api/quickstart/js).
+
+## 2. Preparation
+
+### 2.1. Enable Google Drive API
+
+1. On the [Guide Page](https://developers.google.com/workspace/drive/api/quickstart/js), locate the `Enable the API` button and click to proceed to the quick activation interface. Follow the instructions and confirm the settings to complete the activation process.
+
+2. You can also visit the [Google Drive API Management Interface](https://console.cloud.google.com/apis/library/drive.googleapis.com). Find the `Enable` button at the top and click it; wait for the activation to complete.
+
+3. `Quotas and System Limits Management`(optional): Switch to the `Quotas and System Limits` tab and set appropriate quotas and limits based on your usage and requirements.
+
+### 2.2. Creating an OAuth Client (Optional; not required if using OpenList, a public welfare server, or a self-built server)
+
+1. On the [Credentials Page](https://console.cloud.google.com/apis/credentials?hl=en), click the `Create Credentials` dropdown menu and select and click `OAuth client ID`.
+ > If prompted with `To create an OAuth client ID, you must first configure the consent screen`, click the `Configure consent screen` button, and complete the creation of the `Brand Information` on the subsequent page, selecting `External` for the `Audience`. After completion, return to the Credentials page to continue creating the OAuth client ID.
+ > 
+2. In the pop-up window, select `Web Application` and enter the name of your application type.
+3. For the `Authorized redirect URIs`, enter `https://api.oplist.org/googleui/callback`. If you are using a self-built service or a non-profit organization, please enter the corresponding domain name, for example, `https://your-domain.com/googleui/callback`.
+4. Click the `Create` button to complete the creation of the OAuth client. Note: Make sure to copy and save the `Client ID` and `Client Secret`; you will need them later on.
+
+ 
+
+5. Add yourself as a test user: On the left side, find the `Audience` menu and click to enter it. Then, locate `Test Users` and click the `+ Add users` button. Enter your Google account email address and click `Save`.
+
+ 
+
+6. After completing the testing, you can publish your application: On the left side, find the `Audience` menu and click to enter it. Then, locate `Publication Status` and click the `Publish app` button. Confirm the publication to complete the application release process.
+
+ 
+
+### 2.3. Get `Access Token` and `Refresh Token`
+
+1. Open the [OpenList Google Authorization Page](https://api.oplist.org/). **⚠️ If you are using a public or self-hosted server, please proceed with that server.**
+
+2. In the dropdown menu on the page, select `GoogleDrive Login`.
+
+ 
+ 
+
+3. If you created an OAuth Client ID in the previous steps, please enter the Client ID and Client Secrets in the input fields below.
+
+ 
+ 
+
+ Otherwise, check the box ☑️ to use the API provided by OpenList. **⚠️ If you are using a public or self-hosted server, the built-in Client ID and Client Secrets of that server will be used.**
+
+ 
+ 
+
+4. Click the `Get Authorization` button. The system will redirect you to the Google Authorization page. Log in to your Google account and authorize OpenList to access your Google Drive.
+
+ 
+
+5. If a message appears stating `This app has not been verified by Google`, click `Advanced` and then click `Go to oplist.org (insecure)` to continue. (If you are using a public or self-hosted server, the domain name here should match the actual domain name of the service; please verify this carefully.)
+
+ 
+
+6. Pay attention to the permission information on the authorization page (within the red box in the image below). Make sure that the permission granted is only for accessing your Google Drive files. If you find that the permission includes access to something other than just your Google Drive files in the public service, please report an issue at [OpenListTeam/OpenList-Docs/issues](https://github.com/OpenListTeam/OpenList-Docs/issues).
+
+ 
+
+7. After authorization is successful, the system will provide you with a `Refresh Token` and an `Access Token`. Please copy and save these tokens, as they will be used in subsequent configurations.
+
+ 
+ 
+
+## 3. Add Google Drive in OpenList
+
+### 3.1. Configuration
+
+#### 3.1.1. Root Folder ID
+
+Similar to Aliyun Drive, it is the last string of the official website URL, such as:
+
+
+
+### 3.2. Start Adding
+
+1. Open the management interface of OpenList and click on `Storage` in the left menu.
+
+2. On the Storage List page, click the `Add Storage` button in the top right corner.
+
+3. Select `Google Drive` as the drive.
+
+ 
+ 
+
+4. Enter the mount path, for example: `google-drive`.
+
+5. In the `Root Folder ID` field, enter the root folder ID obtained earlier; if you are using the root directory, enter `root`.
+
+6. In the `Refresh Token` field, enter the refresh token obtained earlier (if not available, refer to [Preparing for Integration](#_2-preparation).
+
+7. If you are using the OAuth client ID and key provided by OpenList (or a public welfare server/self-built server), follow steps 7.1 and 7.2:
+
+ 7.1. Check the `Use online API` option to indicate that you want to use the online API provided by OpenList.
+
+ 7.2. Enter `https://api.oplist.org/googleui/renewapi` as the API URL; if it’s a public welfare server/self-built server, enter the corresponding server address.
+
+ 
+ 
+
+8. If you are using your own OAuth client ID and key, follow steps 8.1 and 8.2:
+
+ 8.1. Uncheck the `Use online API` option to indicate that you are using your own OAuth client ID and key.
+
+ 8.2. Enter your OAuth client ID in the `Client id` field and your OAuth Client secrets in the `Client secret` field.
+
+ 
+ 
+
+9. Click the `Add` button to complete the addition of Google Drive.
+
+## 4. About `Use online api` option
+
+### 4.1. AccessToken refresh method with own keys
+
+```mermaid
+sequenceDiagram
+ participant OpenList
+ participant GoogleDrive
+ OpenList->>GoogleDrive: Provide refresh token + built-in client ID and secret
+ GoogleDrive->>OpenList: Return new access token + refresh token
+```
+
+### 4.2. AccessToken refresh method without own keys
+
+```mermaid
+---
+title: How to refresh AccessToken via OnlineAPI?
+---
+sequenceDiagram
+ participant OpenList
+ participant OnlineAPI
+ participant GoogleDrive
+ OpenList->>OnlineAPI: Provide refresh token
+ OnlineAPI->>GoogleDrive: Provide refresh token + built-in client ID and secret
+ GoogleDrive->>OnlineAPI: Return new access token + refresh token
+ OnlineAPI->>OpenList: Return new access token + refresh token
+```
+
+## 5. The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[Local Proxy]:::someclass==Default===>a2[User Device]
+ classDef someclass fill:#f96
+ b1[Proxy URL]-.Alternative.->a2[User Device]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/google_photos.md b/pages/en/guide/drivers/google_photos.md
new file mode 100644
index 000000000..292229af6
--- /dev/null
+++ b/pages/en/guide/drivers/google_photos.md
@@ -0,0 +1,73 @@
+---
+top: 596
+categories:
+ - guide
+ - drivers
+---
+
+# Google Photos
+
+::: tip
+Due to the adjustments made by Google Photos to its Library API in April this year (https://developers.google.com/photos/support/updates?hl=en), after successfully mounting Google Photos to openlist, you can actually only view the photos uploaded through openlist. You can no longer view the photos uploaded by users via the official Google Photos app or website as you could before.
+:::
+
+## Root folder file_id
+
+The root directory is root, and other directory IDs are unknown (~~It seems that a separate album cannot be mounted~~ It has not been resolved yet [**Reference**](https://github.com/alist-org/alist/discussions/3264#discussioncomment-4874536))
+
+## Get client_id, client_secret
+
+Get the tool https://api.oplist.org
+
+How to get your own `client_id (client ID) client_secret (client secret key)` Go to [**Google Drive**](./google_drive.md) which article
+
+::: tip
+
+Tip This app has not been verified by Google
+
+You have been authorized to use an app that is currently in beta. Do not proceed unless you know the developer who invited you.
+
+Let's click **Continue** on the left
+
+Remember to check this option, otherwise an error will be reported, as explained in the following precautions
+:::
+
+It is more convenient now. In fact, when obtaining Google cloud disk authorization, select the album permission at the same time, and the token obtained at that time can also be used to mount the album~ kill two birds with one stone
+
+Remember to enable **`Photos Library API`**
+
+- https://console.cloud.google.com/apis/library/photoslibrary.googleapis.com
+
+According to [above](https://api.oplist.org) obtained **client ID** and **secret key** and **refresh_token**
+
+We fill in **https://api.oplist.org** to get a single catalog ID for each of our Google Photos
+
+- Root file ID (that is, the album ID): default root, display all, if you only want to display a single album, you can fill in the album ID you want to display
+- After we fill in, there will also be an **`access_token`** below. This can also be filled in the OpenList background refresh token option and used. The refresh token obtained at the beginning can be used for both of them- [Explanation](https://github.com/alist-org/alist/discussions/3264#discussioncomment-5051171)
+
+## Two notes:
+
+1. failed get objs: failed to list objs: Request had insufficient authentication scopes.: []
+ - It's because you didn't check the album permission (see the picture mentioned above) `view and organize the content in your Google Photos media library, and upload content to the media library when obtaining authorization. Learn more`
+ - You get the `access_token` and the `refresh_token` without declearing the scope of `https://www.googleapis.com/auth/photoslibrary`
+2. failed get objs: failed to list objs: Photos Library API has not been used in project ... before or it is disabled. Enable it by visiting then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.: []
+ - because **`Photos Library API`** is not enabled in your project, Google Photos API
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/guangyapan.md b/pages/en/guide/drivers/guangyapan.md
new file mode 100644
index 000000000..aaa5a7425
--- /dev/null
+++ b/pages/en/guide/drivers/guangyapan.md
@@ -0,0 +1,89 @@
+---
+top: 701
+categories:
+ - guide
+ - drivers
+---
+
+# GuangYaPan
+
+
+
+:::: warning
+This driver uses a **two-stage SMS login**. You need to provide a valid `client_id` before login. After completing the SMS login, `access_token` and `refresh_token` are saved automatically, and you can log in again with just `access_token` or `refresh_token`.
+::::
+
+## 1. Add in OpenList
+
+### Client ID
+
+**Required**. Fill in the `client_id` for the GuangYaPan API. This field must be provided, otherwise storage initialization will fail.
+
+### Phone Number
+
+The phone number used for SMS login, e.g. `+86 13800000000`.
+
+### Captcha Token
+
+Captcha token required by `/v1/auth/verification`. Leave it empty if no captcha is triggered.
+
+### Send Code
+
+Set it to `true` and save to send the SMS code. It auto-resets to `false` after sending.
+
+### Verify Code
+
+The SMS verification code you received. Fill it in and save to finish the login.
+
+### Verification ID
+
+Auto-generated after sending the SMS code. Do not edit it manually.
+
+### Access Token
+
+Bearer access token. It is saved automatically after SMS login. If you already have a valid `access_token` or `refresh_token`, you can fill it directly instead of doing the SMS login.
+
+### Refresh Token
+
+Refresh token for auto-login and auto-refresh. Saved automatically after SMS login.
+
+### Root Folder Path
+
+Full path in the GuangYaPan cloud drive, e.g. `/Movies/Anime`. Leave it empty to use the root directory.
+
+### Device ID
+
+Optional custom device id (32 hex chars). Auto-generated when empty.
+
+### Device Sign
+
+Optional custom `X-Device-Sign` header. Generated from `device_id` when empty.
+
+### Page Size / Order By / Sort Type
+
+- `Page Size`: file list page size, default `100`.
+- `Order By`: sort field used by the file list, options `0,1,2,3,4`, default `3`.
+- `Sort Type`: sort direction used by the file list, options `0,1`, default `1`.
+
+## 2. SMS Login Steps
+
+1. Fill in `client_id` and `phone_number` (and `captcha_token` if needed).
+2. Set `send_code` to `true`, then save. The storage will enter a "SMS sent" status and the `verification_id` is generated automatically.
+3. Fill in the received `verify_code`, then save again to finish the login. The `access_token` and `refresh_token` are saved automatically.
+
+## 3. Offline Download
+
+GuangYaPan supports calling its own offline download function from OpenList.
+
+1. Mount a GuangYaPan storage.
+2. In the backend **Settings** → **Other**, set the GuangYaPan temporary directory (choose any folder of this account).
+3. Go back to the frontend, enter the target folder, and choose **GuangYaPan** in the offline download option at the lower right corner.
+
+- Supports adding offline tasks via URL (e.g. `http`, `magnet` links).
+
+## 4. Precautions
+
+- `client_id` is required, otherwise storage initialization will fail.
+- The `verify_code` is one-time use and will be cleared after a successful login.
+- The driver does not support overwriting uploads (same-name files will not overwrite).
+- Login priority: `access_token` → `refresh_token` → SMS login.
diff --git a/pages/en/guide/drivers/halalcloud.md b/pages/en/guide/drivers/halalcloud.md
new file mode 100644
index 000000000..f66526de6
--- /dev/null
+++ b/pages/en/guide/drivers/halalcloud.md
@@ -0,0 +1,56 @@
+---
+top: 679
+categories:
+ - guide
+ - drivers
+---
+
+# halalcloud
+
+- `6盘(halalcloud)` Official website:[https://2dland.cn](https://2dland.cn/)
+ - Cloud Login:https://drive.2dland.cn
+- Official announcement, document address:https://2dland.yuque.com/r/organizations/homepage
+
+## Root folder file_id
+
+Top address bar path,Root folder file_id is:`/`
+Subfolder: `/A folder/C folder/C folder`
+
+## Fill in the example
+
+On the HalalCloud (6 盘) website, go to `User Center` and navigate to `Authorization Management`. Enter your HalalCloud account password to verify your identity.
+
+Create a new authorization (you can name it anything you like). Click `Confirm`, then copy and save the `Client ID` and `Client Secret`.
+
+
+
+In the OpenList admin panel, go to `Storage` and add a new driver. Select `HalalCloudOpen`, and enter the `Client ID` and `Client Secret` obtained from the previous step.
+
+## Other parameters
+
+- `Upload thread`: Upload threads (Default: 3, Range: 1-32)
+
+- `Host`: (Provided by default, no input required)
+
+- `WebDAV Policy`: Default is `302 Redirect`. Switch to `Local Proxy` if you encounter any issues.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/ilanzou.md b/pages/en/guide/drivers/ilanzou.md
new file mode 100644
index 000000000..ce47454b9
--- /dev/null
+++ b/pages/en/guide/drivers/ilanzou.md
@@ -0,0 +1,46 @@
+---
+top: 687
+categories:
+ - guide
+ - drivers
+---
+
+# iLanZou
+
+**https://ilanzou.com**
+
+
+
+## Root folder ID
+
+root folder ID the default is `0`,Other directory ID View the figure below obtaining method
+
+
+## username、password
+
+Just fill in your own NewLanzou Cloud Account Password
+
+## Known issues
+
+The file size returned by iLanZou is in Kilo Bytes, not Bytes. Therefore, you cannot accurately determine if a file has been modified based on its size. Please pay attention to the configuration of your sync software.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/index.md b/pages/en/guide/drivers/index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/en/guide/drivers/kodbox.md b/pages/en/guide/drivers/kodbox.md
new file mode 100644
index 000000000..e5f2ed091
--- /dev/null
+++ b/pages/en/guide/drivers/kodbox.md
@@ -0,0 +1,55 @@
+---
+top: 496
+categories:
+ - guide
+ - drivers
+---
+
+# KodBox
+
+Use this driver to mount a KodBox netdisk space to OpenList.
+
+## Root folder path
+
+Suppose you have a network disk space named `My Files`. If you remount the contents of the network disk space, you need to obtain the path corresponding to `My File`; if you re-display a name in the network disk space for For the directory of `abc`, you must obtain the path corresponding to `My File/abc`, and so on.
+
+Example: How to get the path of KodBox network disk space `My File`, the result path is `{source:5}`
+
+Open the KodBox network disk space in the browser. In the console mode, you can see the path corresponding to the network disk space. Do not leave it blank.
+
+
+## Address
+
+Your KodBox server address, e.g.
+
+- `https://kodcloud.cc`
+- `http://192.168.1.24:8000`
+
+## Username
+
+The email or username used to log in to your KodBox server.
+
+## Password
+
+The password for your email or username.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/lanzou.md b/pages/en/guide/drivers/lanzou.md
new file mode 100644
index 000000000..14c59afe1
--- /dev/null
+++ b/pages/en/guide/drivers/lanzou.md
@@ -0,0 +1,94 @@
+---
+top: 688
+categories:
+ - guide
+ - drivers
+---
+
+# LanZou Cloud
+
+
+
+Lanzuo Network Disk has three types of **modes (types)**, which are **Accounts**, **Cookie** and **Url**
+
+- **Account**: You can display all the files of your own cloud disk, you only need to fill in the account password, which will automatically help you refresh the cookie
+
+- **Cookie**: All files in the network disk can be displayed, but the cookie of the network disk needs to be provided
+
+- **Url**: only display the content in the link (you can mount it without providing a cookie)
+
+::: tip
+
+It is recommended to use the **Account** method to mount
+
+- Cookie mode needs to manually update Cookie
+
+:::
+
+## root folder ID
+
+Lanzuo cloud disk root directory ID, the default is `-1`,If you use `Url`Type to mount the root folder ID, please see the third item of [Fill in instructions](#fill-in-instructions)
+
+- **Additional Folder ID**
+ - Two ways to obtain (see the picture below)
+
+ 
+
+## Account
+
+Just fill in your own Lanzou Cloud Account Password
+
+## Cookie
+
+Log in to your [**Lanzuo Cloud Disk**](https://pc.woozooo.com/) account, then F12 to open the developer mode, you can find `Cookie`, there is no specific one, such as the left side of the picture Just click one and there will be `Cookie` in the blue part of the right picture.
+
+
+## Share link and share password
+
+- **Share link**: Randomly generate a share link in the Lanzuo cloud disk
+ - Small tip: **lanzouX** in the link, the last default **X** content sometimes cannot be opened in some areas, you can try to change it yourself, for example, change to i, x, u, t, etc. Anyway, try it out for yourself.
+- **Share password**: the password for the link
+
+## Repair file info
+
+If you need **WebDav** service, you need to open it
+
+## error message
+
+Use cookie type or account type to add prompt `not find file page param` error because lanzou changed the domain name
+
+- Solution: It is recommended to use account type to add
+ - Change the sharing link to `https://wwop.lanzoul.com` and save it. If it still doesn't work, refresh the lower right corner.
+ - lanzoul will also make changes in the future
+
+## Fill in instructions
+
+1. **Acount mode**: Type selects `account`, fill in` account` and `password` options, and the `root folder ID` (the default is all files of the root directory)
+2. **Cookie mode**: Type selects `Cookie`, fill in` Cookie`, and the `root folder ID` (the default is all files of the root directory)
+3. **URL mode**: Type selects `Url`, fill in` ShareUrl` and `root folder ID` and`Share Password (if there is a password)`
+ - The sharing link is :point_right: https://xxx.lanzou.com/aaabbbccc :point_left: in this format
+ - Fill in `ShareUrl`: https://xxx.lanzou.com
+ - Fill in `root folder ID`: aaabbbccc
+ - Share Password: if there is a password
+ 
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/lenovo_nas_share.md b/pages/en/guide/drivers/lenovo_nas_share.md
new file mode 100644
index 000000000..c6c9a0476
--- /dev/null
+++ b/pages/en/guide/drivers/lenovo_nas_share.md
@@ -0,0 +1,59 @@
+---
+top: 494
+categories:
+ - guide
+ - drivers
+---
+
+# Lenovo Nas Share
+
+
+
+Need to purchase Lenovo devices **https://pc.lenovo.com.cn**
+
+## Root Folder ID
+
+Root Folder ID: Leave it blank
+
+Subfolder ID: Get as shown in the picture
+
+
+
+## Share ID and Share Password
+
+Example of share link: https://siot-share.lenovo.com.cn/s/#/eb.3N93ZbJsaAjerjdm4N Extraction code: `e5eu`
+
+- **Share ID**: Fill in the sharing link and automatically extract the string `eb.3N93ZbJsaAjerjdm4N` at the end of the sharing link
+- **Share Password**: The extraction code `e5eu`
+
+## Host Address
+
+The default uses the public network: **https://siot-share.lenovo.com.cn**
+
+(Not recommended) If you are using a local network, you can change it to the internal network address of the Lenovo device: **http://192.168.XX.XX**
+
+## Show Root Folder
+
+If unchecked and `Share ID` is empty, the folder ID of the first-level folder is automatically filled in.
+Taking the above picture as an example, the contents of the `OpenList` folder are directly displayed without displaying the `OpenList` folder.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/local.md b/pages/en/guide/drivers/local.md
new file mode 100644
index 000000000..c18af02d6
--- /dev/null
+++ b/pages/en/guide/drivers/local.md
@@ -0,0 +1,65 @@
+---
+top: 999
+categories:
+ - guide
+ - drivers
+---
+
+# Local storage
+
+Support mounting the directory of the local machine.
+
+## Root folder path
+
+The path of folder you wanted to mount. For example:
+
+- Linux: `/root`
+- Windows: `C:`
+
+## Local storage video thumbnail
+
+You need to use the `ffmpeg` tool to add.
+
+## Local storage PDF thumbnail on macOS
+
+On macOS, the Local storage driver can generate thumbnails from the first page of PDF files using the system Quick Look tool.
+
+To enable this feature:
+
+1. Enable `Thumbnail`.
+2. Enable `PDF thumbnail`.
+3. It is recommended to configure `Thumb cache folder` to avoid rendering the same PDF repeatedly.
+
+This feature is disabled by default and is only available when OpenList runs on macOS. Rendering is performed on cache misses and may consume additional CPU and memory.
+
+## Recycle bin path
+
+path to recycle bin, delete permanently if empty or keep 'delete permanently'
+
+If you fill in this path, you will move the file into the folder when deleting the local storage file, so that you have a chance to regret it.
+
+The method of filling in the above -mentioned mounting path is different from different system filling methods.
+
+If you don’t know if you fill in it correctly, you can test it yourself first and then use the production environment to use it yourself.
+
+- Linux: `/root`
+- Windows: `C:`
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/mediafire.md b/pages/en/guide/drivers/mediafire.md
new file mode 100644
index 000000000..a72652628
--- /dev/null
+++ b/pages/en/guide/drivers/mediafire.md
@@ -0,0 +1,30 @@
+---
+top: 520
+categories:
+ - guide
+ - drivers
+---
+
+# MediaFire
+
+Mount [MediaFire](https://www.mediafire.com/) cloud storage.
+
+## Root folder path
+
+The default root directory for the path to mount mediafire, default is `/`.
+
+## Session Token
+
+Session Token
+
+Open the browser developer tools, visit [mediafire.com](https://www.mediafire.com/), log in to your account, go to the `Network` tab, open `get_session_token.php`, find `session_token` in the `Response`, and copy its value to fill in.
+
+
+
+## Cookie
+
+Web Cookie
+
+Open the browser developer tools, visit [mediafire.com](https://www.mediafire.com/), log in to your account, go to the `Network` tab, open `get_session_token.php`, find `Cookie` in the `Header`, and copy its value to fill in.
+
+
diff --git a/pages/en/guide/drivers/mediatrack.md b/pages/en/guide/drivers/mediatrack.md
new file mode 100644
index 000000000..89eeeaa1e
--- /dev/null
+++ b/pages/en/guide/drivers/mediatrack.md
@@ -0,0 +1,46 @@
+---
+top: 680
+categories:
+ - guide
+ - drivers
+---
+
+# Mediatrack
+
+**https://app.mediatrack.cn**
+
+### Access token
+
+You can get it in request header after logging in
+
+
+### Project id
+
+Get from official website url:
+
+
+### Root folder id
+
+Get it from the request after logging in
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/mega.md b/pages/en/guide/drivers/mega.md
new file mode 100644
index 000000000..1d0f1de52
--- /dev/null
+++ b/pages/en/guide/drivers/mega.md
@@ -0,0 +1,64 @@
+---
+top: 592
+categories:
+ - guide
+ - drivers
+---
+
+# MEGA Disk
+
+::: warning
+Due to MEGA requires decryption to be performed on the OpenList server backend, **using proxy URL** with this driver cannot avoid server traffic consumption.
+:::
+
+MEGA official website: **https://mega.nz/login**
+
+### Mail
+
+MEGA login account
+
+### password
+
+login password
+
+## 2FA
+
+Non -filling options,If you open 2FA, you need to fill in it,If you don’t use 2FA, you don’t need to fill in it
+
+### Two fa secret
+
+**https://mega.nz/fm/account/security/two-factor-authentication**
+Click to enable `Enable two-factor authentication (2FA)` and then see a QR code, there is a string of letters below the QR code, This is `Two fa secret`, please record before scanning the code and do not lose it, Should the `Two-factor authentication (2FA) secret` be lost, you can unbinding and then retrieve a new 2FA QR code for setup.
+
+
+### Two fa code
+
+To enable 2-factor authentication, you need to install a app that support 2FA (such as [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2), [Microsoft Authenticator](https://support.microsoft.com/en-us/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a)), on your phone.
+Then login to OpenList manage and goto `Profile` page, click `Enable 2FA` button, scan the QR code with your 2FA app, and enter the code generated by your 2FA app.
+Scan the QR appearing on the screen. At the same time, this QR code is also [two-fa-secret](#two-fa-secret)
+
+
+
+## Fill in example:
+
+
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/misskey.md b/pages/en/guide/drivers/misskey.md
new file mode 100644
index 000000000..9788bcda3
--- /dev/null
+++ b/pages/en/guide/drivers/misskey.md
@@ -0,0 +1,17 @@
+---
+top: 588
+categories:
+ - guide
+ - drivers
+---
+
+# Misskey Drive
+
+## Instance URL
+
+The URL of your Misskey instance, whether self-hosted or in use.
+For example, the official instance at `https://misskey.io`
+
+## Token
+
+Visit `https://{misskey-instance}/settings/api` to generate an access token. It requires the `read:drive` and `write:drive` permissions.
diff --git a/pages/en/guide/drivers/mopan.md b/pages/en/guide/drivers/mopan.md
new file mode 100644
index 000000000..dea6db66c
--- /dev/null
+++ b/pages/en/guide/drivers/mopan.md
@@ -0,0 +1,50 @@
+---
+top: 691
+categories:
+ - guide
+ - drivers
+---
+
+# MoPan
+
+
+
+MoPan address:**https://mopan.sc.189.cn/mopan/#/downloadPc**
+
+- There is no web version, only `Android`, `iOS`, `PC-Win64bit`, `iPad`, and `TV`.
+
+## Sms code
+
+Enter the option of the mobile phone number and password when the first addition, and then enter the `SMS Code` input `send`, and then click Save to send it to you.
+
+## Root folder ID
+
+Do not fill in this option, it will automatically fill into the root directory
+
+- Due to encrypted requests, an appropriate method for obtaining folder IDs has not yet been found
+
+### Tips
+
+1. `root folder ID`,`equipment information`does not need to be filled in, will automatically help you fill
+2. If you enter the send in [SMS Code] (#SMS-Code), it is found that it has been saved,Please click Edit to enter the verification code received
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/onedrive.md b/pages/en/guide/drivers/onedrive.md
new file mode 100644
index 000000000..e0a92da35
--- /dev/null
+++ b/pages/en/guide/drivers/onedrive.md
@@ -0,0 +1,146 @@
+---
+top: 599
+categories:
+ - guide
+ - drivers
+---
+
+# OneDrive / Share
+
+:::tip
+
+- If you have global administrator permissions for a non-home edition, you can use the [OneDrive APP](onedrive_app.md) driver.
+- If your account does not support the API, (for example, the school account has not verified the administrator, or the administrator has disabled the API), then you can also mount it through webdav. For details, see [webdav](webdav.md)
+
+:::
+
+## 1. Mounting using Online API's default application
+
+You do not need to create an application yourself by mounting in this way.
+
+1. Open and select the corresponding OneDrive version according to your account.
+
+2. Check "Use parameters provided by OpenList", click "Get Token", then log in to the OneDrive account you want to mount. After authorization, return to the page to get the refresh token.
+
+ 
+
+3. Go to the storage management interface of OpenList, select the OneDrive driver, check "Use online API", fill in the refresh token and you can mount it.
+
+ 
+
+## 2. Mounting by creating an application manually
+
+The application provided by OpenList API may experience issues such as request rate limits due to a high number of users. In this case, you can manually create an application.
+
+1. Navigate to the corresponding management page based on your account type.
+ - OneDrive Global:https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
+ - OneDrive 21vianet:https://portal.azure.cn/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
+ - OneDrive Germany:https://portal.microsoftazure.de/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
+ - OneDrive US GOV:https://portal.azure.us/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
+
+2. After logging in, select `Register Application`, enter `Name`, and select `Accounts and Individuals in Any Organization Directory` (note that you don't look at the location selection but the text here. Some people may be the middle option, don't select a single Tenant or other options, otherwise it will cause problems when logging in), enter the `Redirect URL` as `https://api.oplist.org/onedrive/callback`, click `Register`, and then you can get the `client_id`.
+
+ 
+
+3. After registering the application, select `Certificate and Password`, click `New Client Password`, enter a string of passwords, select the one with the longest time, and click `Add`.
+
+ (Note: The password entered after adding will disappear, please record the value of client_secret)
+
+ 
+
+4. Select `API Permissions`, click `MicroSoft Graph`, enter file in the `Select Permissions`, and check `Files.read` (Note: `Files.read` is a read-only minimum permission. The permission in the figure is larger, and the same can be done), click `Update Permission`.
+
+ 
+
+5. Fill in the `client_id` and `client_secret` obtained in the previous step into page, click `Get Token`.
+
+6. Go to OpenList's add storage page, uncheck "Use online API", and fill in the obtained `client_id`, `client_secret`, `Callback URL`, and `Refresh Token` in OpenList.
+
+## Parameters
+
+### Sharepoint site_id
+
+If you need to mount SharePoint, after completing the above steps, there will be an input field for the site address below the refresh token display. Enter the site address, click to get the `site_id`, and then fill the obtained information into the `site_id` field on the OpenList add storage page. Make sure `Is sharepoint` is enabled.
+
+### Root folder path
+
+The default is `/`, if you need to customize, just fill in the path, starting from the root path, the same as the local path, such as `/test`
+
+### Chunk size
+
+Upload chunk size (MiB). The default is `5`, which means `5 * 1024 * 1024 = 5,242,880` bytes. Make sure to use a size that is a multiple of 320 KiB (`327,680` bytes).
+
+### Custom host
+
+Custom accelerated download link. This is the domain name of your reverse-proxied OneDrive download API (for example, for personal accounts: `my.microsoftpersonalcontent.com`). Only domain replacement is supported here, not path replacement.
+
+::: warning
+
+- Only hostname replacement is supported, not path.
+- Be sure to properly isolate and only reverse proxy your own paths, otherwise your Cloudflare account may be banned!
+
+:::
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 3. OneDrive Share Url
+
+
+
+
+
+### Url
+
+The sharing link is the same as the example below and can be mounted. It can be obtained from E3, E5, A1, and A1P.
+
+```html
+https://connecthkuhk-my.sharepoint.com/:f:/g/personal/jhyang13_connect_hku_hk/EsEgHtGOWbJImxop6tF15FIBIH-ihrjuDclbrbmwWfY_RA?e=s6fitN
+```
+
+If it is OneDrive personal version, it will not work. The link is as follows
+
+```html
+https://onedrive.live.com/?cid=64EA5FCC7735E8C6&id=64EA5FCC7735E8C6%2117289
+```
+
+### Password
+
+It is the extraction code. If you have it, write it. If you don’t have it, don’t fill it in.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/onedrive_app.md b/pages/en/guide/drivers/onedrive_app.md
new file mode 100644
index 000000000..dc418747e
--- /dev/null
+++ b/pages/en/guide/drivers/onedrive_app.md
@@ -0,0 +1,173 @@
+---
+top: 598
+categories:
+ - guide
+ - drivers
+---
+
+# OneDrive APP
+
+## Benefits and Precautions
+
+1. The advantage is that the administrator is only authorized to log in once, and the same is used when adding parameters later. When adding, everything is the same except for the mailbox.
+ - For example, E5 has 25 5T accounts. After you log in and initialize in advance, you can directly use the parameters before the CV. You don’t have to get the refresh token every time as before, and it will expire after a long time
+ - A1, A1P, etc. can distribute more accounts (500 - **unlimited**)
+2. After the administrator authorizes in this way, he can view the account of each member in the organization at will, which will leak his own files
+ - It is recommended to apply for OneDrive E5 to get better
+
+::: tip
+It is not applicable to the home version. If you are in the configuration process, it does not match the options that appear in the tutorial. It may not be supported
+:::
+
+First log in with your personal or organizational account
+
+
+
+Login to get our `tenant ID`
+
+
+
+To log in to OneDrive (Operated by 21Vianet), please use this link
+
+
+
+## Create process
+
+::: danger Read the precautions carefully
+Please read carefully the following **`serial numbers , view in sequence`** , if there is any error, please feedback in time
+:::
+
+1. Register an application, choose the type yourself, it is recommended to choose the third
+2. Redirect URL (callback parameter), select Web as the type, and fill in the parameters **https://entra.microsoft.com/TokenAuthorize** ,Otherwise, it will not be able to authorize later. For OneDrive (Operated by 21Vianet), please use: **https://entra.microsoftonline.cn/TokenAuthorize**
+3. After filling out, click on the registration below and you can see it after jumping `client ID`
+ 
+
+Let's get a client secret key, just get it as shown in the figure below, remember `secret key` save in time, it will only appear once
+
+
+Once you have obtained the client secret key, go to authorize the **`API`** to be used, and follow the picture below to get it
+
+
+After the API is authorized, we go to authorize the organization application
+
+- Left sidebar ---> Enterprise applications ---> All applications ---> **{choose which application name we started to create}** ---> Permissions ---> Click for `xxxx `Grant admin consent
+ 
+
+matters needing attention
+
+- If you start to register the application, the callback parameters are not the same, you may get an error when you click Authorization, remember to write the same
+- How to check whether the authorization is successful. If it is not authorized, the page will prompt `The application has not been found to have the authorization of the administrator's permission`. After the authorization is successful, refresh the page and you will see three API permissions, as shown in the figure below
+ - The above is what it looks like when it is not authorized, and the following is what it looks like after authorization (just refresh the page after authorization)
+ 
+
+From the beginning to the present, we have obtained the following parameters: tenant ID1, registered application2, client ID/secret key3, authorization API/administrator API4
+Then open the browser and finally authorize it through the following format, which are `tenant ID` `client ID` `Callback URL` Change to your own final login to receive
+
+```html
+https://login.microsoftonline.com/{tenant ID or common}/adminConsent?client_id={client
+ID}&redirect_uri={Callback URL}
+```
+
+For OneDrive (Operated by 21Vianet), please use:
+
+```html
+https://login.partner.microsoftonline.cn/{tenant ID or common}/adminConsent?client_id={client
+ID}&redirect_uri={Callback URL}
+```
+
+
+If you log in according to the spelled link and find that you are redirected to a blank page, such as the sample code and picture below, the authorization is successful, don’t worry
+
+```
+https://entra.microsoft.com/TokenAuthorize?admin_consent=True&tenant={Tenant ID}#
+```
+
+
+
+## Fill in the example
+
+Fill in the values obtained in the above process one by one. If you don’t know which email address it is, you can find it by [**view all users of the organization**](#view-all-users-of-the-organization)
+
+
+
+
+## View all users of the organization
+
+If you don't know how many users there are in your OneDrive organization, you can go to the link below to log in to the `admin` account to view
+**https://admin.microsoft.com/Adminportal/Home?source=applauncher#/users**
+
+
+## Error message
+
+- Tips:**Either scp or roles claim need to be present in the token** Error
+ because you didn't do it in step 4 `grant xxx administrator consent` caused by,Pay attention to the tips below the fourth step
+- Tips:**failed get objs: failed to list objs: Unable to retrieve user's mysite URL** Error
+ The newly created `OneDrive` user account does not take effect in real time, Delay takes effect, wait for a few hours and try again [**Case**](https://github.com/alist-org/docs/discussions/189#discussioncomment-5928892)
+
+## Add OneDrive_App accounts in batches
+
+software used:**https://github.com/yzbtdiy/alist_batch**
+:::details Fill in the parameters. If you don’t understand, you can watch the video below.
+Do not leave blank lines in the two configuration files, as this will also report an error
+**config.yaml**
+
+```yaml
+url: ALIST_URL
+auth:
+ username: USERNAME
+ password: PASSWORD
+token: ALIST_TOKEN
+aliyun:
+ enable: false
+ refresh_token: ALI_YUNPAN_REFRESH_TOKEN
+pikpak:
+ enable: false
+ username: PIKPAK_EMAIL
+ password: PIKPAK_PASSWORD
+onedrive_app:
+ enable: true
+ region: global
+ tenants:
+ - id: 1
+ client_id: client_id
+ client_secret: client_secret
+ tenant_id: tenant_id
+```
+
+**onedrive_app.yaml**
+
+```yaml
+Category:
+ mount: 1:user1@xxx.onmicrosoft.com
+ mount2: 1:user2@xxx.onmicrosoft.com:/folder1
+ mount3: 1:user2@xxx.onmicrosoft.com:/folder2
+Category2:
+ mount11: 1:user1@xxx.onmicrosoft.com
+ mount22: 1:user2@xxx.onmicrosoft.com:/folder1
+ mount33: 1:user2@xxx.onmicrosoft.com:/folder2
+```
+
+:::
+
+
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/openlist.md b/pages/en/guide/drivers/openlist.md
new file mode 100644
index 000000000..dcdf10f43
--- /dev/null
+++ b/pages/en/guide/drivers/openlist.md
@@ -0,0 +1,96 @@
+---
+top: 499
+categories:
+ - guide
+ - drivers
+---
+
+# OpenList
+
+Support mounting OpenList directories running on other servers
+
+## Url
+
+OpenList link you want to mount
+
+## Username
+
+username
+
+When `username&password` is not filled in, `guest` is used for guest access.
+
+## Password
+
+password
+
+## Root folder path
+
+The default root directory for the path to mount to is`/`
+
+## Meta password
+
+The OpenList path you want to mount has a meta information password set. You need to know what the other party's password is set to see the file, otherwise it will be blank after entering
+
+If multiple folders have different password settings, the password you fill in can only enter the folder with this password, and those without this password cannot enter
+
+::: danger
+If you first use the `username&password` method for mounting, and then switch to using the `metadata password` method for mounting, you need to manually clear the previously automatically filled `token`, otherwise you will still use the `username&password` method for mounting
+
+:::
+
+## Token
+
+You don’t need to write, it will be automatically filled after filling in `Username & Password` and saving
+
+## Proxy Range
+
+You need to enable `Web Proxy` or `Webdav Native Proxy` to take effect
+
+Mount '139Yun' on the OpenList of the server and go to 302. Then, locally mount the OpenList on the server through the OpenList enabled proxy to play videos,achieving the goal of not using server traffic. The CMCC mobile card can also be streamed free
+
+## Error message
+
+::: danger
+If the OpenList you mounted is "not" enabled Allow Mount, you will not be able to To mount, the following error is prompted
+
+```json
+Failed init storage: the site does not allow mounted
+failed get objs: storage not init: the site does not allow mounted
+```
+
+Solution: Use the allowed `username&password` provided by the other party for mounting
+
+:::
+
+::: danger
+
+If the other party does not enable the guest account access permission, an error will be prompted when mounting (as follows)
+
+```json
+failed get objs: failed to list objs: request failed,code: 400, message: Key: 'LoginReq.Username' Error:Field validation for 'Username' failed on the 'required' tag
+```
+
+Solution: Use the allowed `username&password` provided by the other party for mounting
+
+:::
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/pikpak.md b/pages/en/guide/drivers/pikpak.md
new file mode 100644
index 000000000..3a40a51e4
--- /dev/null
+++ b/pages/en/guide/drivers/pikpak.md
@@ -0,0 +1,175 @@
+---
+top: 595
+categories:
+ - guide
+ - drivers
+---
+
+# PikPak / Share
+
+::: danger
+
+1. `Pikpak`:Who makes the request, who can use it
+ - For example, if you build an OpenList on the server with IP `1.1.1.1`, but your own IP is `2.2.2.2`, you cannot play or download it.
+ - Or enable Proxy policy
+
+2. `PikPak Share`:There is a size limit. After the specified file size is exceeded, only 40%~50% can be played.
+ - The specific size of the file is currently unknown
+
+:::
+
+## 1. PikPak
+
+### Username
+
+email or phone?
+
+### Password
+
+password
+
+### Root folder id
+
+Can get with https://mypikpak.com/ , default `root`.
+
+
+
+### Platform
+
+It is not necessary to use it under normal circumstances, but you may need to use it when you cannot log in directly with your account and password.
+
+- If you choose `android`, it will simulate the Android client for access. If you want to log in using the `Refresh token`, please perform packet-sniffing on the **official Android app**.
+
+- If you choose `web`, it will simulate the official web version for access. If you want to log in using the `Refresh token`, please use the `Refresh token` obtained from the **web version**.
+
+### Refresh token
+
+After filling in the account and password, select `Oauth2` for `Refresh token method` and then save to automatically fill in the refresh token and device information.
+
+#### Get Refresh Token on Web
+
+After logging into the official website, open the F12 console and navigate to the page shown in the image below (using Chrome as an example):
+
+
+
+Find the option that starts with `credentials`. Select it, and observe the information bar below. From there, you can retrieve the `Refresh token`, as shown in the image below:
+
+
+
+### Disable media link
+
+The OpenList interface uses the playback interface. When the file resolution is too high or the file size is too large, Pikpak will automatically transcode, which may cause synchronization errors in other applications. Enabling this option will prevent using the playback interface to obtain the address.
+
+According to the official limitations, when the video's bitrate exceeds 40 Mbps or the file size is greater than 50 GB, the system will automatically trigger transcoding. If the video already offers other resolution options, the "original quality" resolution will not be available.
+
+### Offline Download
+
+support calling `Pikpak` offline download function in OpenList
+
+Select `Pikpak` in the lower right corner and select `Pikpak` for offline download options
+
+- Support: `magnet`, `http`, `ed2k` links
+- Also supports: X, TikTok, Facebook, TG URL links
+
+- Only Pikpak is supported for offline download. If it is not Pikpak, the following error message will be displayed, Although the offline download prompt was successfully added, an error will be prompted in the background.
+
+ unsupported storage driver for offline download, only Pikpak is supported
+
+ 
+
+## 2. PikPak Share
+
+::: warning
+It is known that PikPak Share can only see 40%-50%
+:::
+
+You only need to fill in **`Username`, `Password`, `Shared ID`** three items, **root folder ID** can be written or not, if not written, the default is the root directory (root directory)
+
+- Root folder ID: If it is a multi-layer directory, which directory do you want to display as the root directory, you can write which root directory.(Refer to the method of obtaining the root folder ID below)
+- Sharing password: if there is a password to share, write it, if not, don’t write it
+
+
+
+### Get Root Folder ID
+
+
+
+**The root directory ID of the current pikpak share can no longer be obtained in the address, you need to check the data returned by the interface**
+
+- Open the F12 console and go to the Network tab
+- Refresh the page and search for `detail`, find the last `detail` request
+- Select `detail` and find `files` in the Response
+- Find the corresponding folder name and check its `id` field content as the root folder ID.(You can confirm the corresponding folder through the `name` field)
+
+### Use transcoding address
+
+Not enabled by default. When enabled, the download address will use the **transcoded address**, and you can get the **complete transcoded file**
+
+- After turning on the `Use transcoding address` option, you cannot use the `OpenList` web version to play the video, but you can **download it normally** or **use a third-party player**
+
+### Batch add PikPak shared mounts
+
+software used:**https://github.com/yzbtdiy/alist_batch**
+
+
+
+## Precautions
+
+**Q**: Encountering verification code issues
+
+**A**:
+
+- The method has now been adjusted to use `oauth2` for token refresh.
+- The username and password are now only used for login to obtain the `Refresh token` and generate the `DeviceID`.
+- When encountering the issue `Your operation is too frequent, please try again later`, please try logging in using **third-party authorization** (such as Google login) on the **official web version** or **official Android app**. Afterward, **obtain the `Refresh token` for mounting** — note the selection of the `Platform` at this time.
+
+---
+
+**Q**: Encountering the following situation: `Failed load storage: failed init storage: Your operation is too frequent, please try again later`
+
+
+
+**A**: This means that the access has been too frequent, and the account/IP will be unable to log in for a period of time. Note: After this occurs, **you can log in to the official client normally using third-party authorization**. Also, **using this IP to request any account may trigger the issue again**, so you could try logging in using the `Refresh token` method (though it is not guaranteed to be effective).
+
+---
+
+**Q**: Encountering the `Click Here` prompt
+
+**A**: Please click on it, then open F12 or launch a packet-sniffing tool. Complete the CAPTCHA as shown in the image below, obtain the `captcha_token`, and enter it into the driver's `Captcha token` field. After saving, the driver should work normally — **this applies to cases where login is done with username and password**.
+
+
+
+---
+
+---
+
+**Q**: Prompt when adding storage: **Failed init storage: invalid_account_or_password** What should I do, the password I entered is correct
+
+**A**: If the account password is not filled in incorrectly, it may be that you used Google, FB and other third-party quick registration when you registered. Although it seems that the account is a Google mailbox, you cannot log in with the mailbox, but you must use the first Three-party verification, **OpenList** does not support this kind of jumping to third-party verification, **so you need to bind an email address in the account settings and set a login password**, or register a new account
+
+---
+
+**Q**: Prompt when adding mount: **failed get objs: failed to list objs: Sorry, sharing is not available in the current region**
+
+**A**: Because access to PikPak is prohibited in China, just use a proxy for `OpenList`, how to make `OpenList` use a proxy [**One of the reference solutions, this method is limited to Windows build**](https://anwen-anyi.github.io/index/07-wenti.html#_41-alist%E5%A6%82%E4%BD%95-%E4%BD%BF%E7%94%A8-%E5%90%83%E5%88%B0-%E4%BB%A3%E7%90%86-proxy)
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/quark.md b/pages/en/guide/drivers/quark.md
new file mode 100644
index 000000000..33d5dae9c
--- /dev/null
+++ b/pages/en/guide/drivers/quark.md
@@ -0,0 +1,140 @@
+---
+top: 684
+categories:
+ - guide
+ - drivers
+---
+
+# Quark / TV / Open
+
+
+
+https://pan.quark.cn
+
+:::danger
+Due to Quark Cloud Drive's speed limit issues, it can now only use local proxy for transfers. [See details here](https://github.com/alist-org/alist/issues/4318#issuecomment-1536214188)
+:::
+
+## 1. Quark
+
+### Cookie
+
+Press F12 to open "Developer Tools", select "Network", choose any request on the left, and find the one with the `Cookie` parameter.
+
+
+
+### Root Folder ID
+
+The root directory ID is `0`.
+
+- For subfolder IDs, enter the folder and get the directory ID from the top address bar. The deeper the subdirectory, the further back the directory ID is in the address bar. To mount a specific subdirectory, just use its directory ID.
+
+
+
+Note: Please use Chrome browser to obtain Cookies. If you use Firefox, you may remain as a guest and be prompted to log in.
+
+### [Online Preview/Download] is Slow?
+
+Quark Cloud Drive downloads are slow because a **membership** is required, and mounting can only (forcibly) use the `local proxy` method, which means your OpenList server needs to have high bandwidth.
+
+- What is `local proxy`?
+ - `Local proxy` means your OpenList server acts as a relay: it first downloads to your OpenList server, then forwards to you. If your server's speed is not fast enough, the forwarding speed to you will also be slow.
+
+1. Use a server with higher bandwidth as a relay
+2. Set up at home on your own computer
+3. Or simply give up using it.
+
+### Default Download Method
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[Local Proxy]:::someclass==Forced===>a2[User Device]
+ classDef someclass fill:#f96
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+Note: [**alist/issues/4318**](https://github.com/alist-org/alist/issues/4318#issuecomment-1536214188)
+
+## 2. Quark TV
+
+The TV version supports `302`, but only the `access` and `download` operations are supported; other operations are not supported (not available in the API).
+
+### How to Add
+
+1. Select the `QuarkTV` driver, fill in the mount path, and save.
+2. Return to the drivers page, use the mobile app to scan the QR code (if the QR code is not displayed, click `Table Layout` in the upper right corner of the driver to switch from list mode to table mode).
+3. After scanning and confirming, disable the driver, then enable the driver again to use it.
+ - `Refresh token`, `Device id`, and `Query token` will be filled in automatically, no manual input required.
+ - Please do not edit or modify them manually.
+
+
+
+### Root Folder ID
+
+The root directory ID is `0`.
+
+- For subfolder IDs, enter the folder and get the directory ID from the top address bar. The deeper the subdirectory, the further back the directory ID is in the address bar. To mount a specific subdirectory, just use its directory ID.
+
+
+
+### Default Download Method
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|Default|a2[User Device]
+ classDef someclass fill:#f96
+ c1[Local Proxy]-.Alternative.->a2[User Device]
+ b1[Proxy URL]-.Alternative.->a2[User Device]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 3. Quark Open
+
+:::danger
+This "Open" is not an open interface in the true sense.
+
+No further tutorials are provided.
+:::
+
+### Usage
+
+- Select `Quark Cloud Drive (OAuth2) Authentication Login` at [here](https://api.oplist.org).
+- Fill in the AppID and SignKey you obtained to get the refresh token.
+- Due to the lack of relevant documentation, please use the **online API** for refreshing.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/s3.md b/pages/en/guide/drivers/s3.md
new file mode 100644
index 000000000..852e1442a
--- /dev/null
+++ b/pages/en/guide/drivers/s3.md
@@ -0,0 +1,354 @@
+---
+top: 895
+categories:
+ - guide
+ - drivers
+---
+
+# S3
+
+S3 object storage protocols, such as COS, OSS, B2, etc.
+
+## Bucket
+
+bucket name
+
+## Endpoint
+
+Endpoint address (If you don’t know, you can read the official documents below)
+
+## Region
+
+area (If you don’t know, you can read the official documents below)
+
+## Access key id
+
+Access key id
+
+## Secret access key
+
+Secret access key
+
+## Session token
+
+Session token,Normally, the three-segment token needs to be used, and the two-segment token does not need to fill in this option.
+
+## Custom host
+
+Custom cdn acceleration domain name
+
+## Enable custom host presign
+
+When "Custom host" is left blank, this option does not function.
+
+When disabled: The returned URL does not include signature, which is suitable for cases where the custom host is a CDN.
+
+When enabled: The returned URL includes signature, which is suitable for cases where the host and OSS are from the same data center, the Endpoint is an internal access domain within the data center, and the custom host is an external access domain.
+
+## Sign url expire
+
+The validity period of the signed download address is 4 hours by default. If a custom accelerated domain name is used, this option is invalid.
+
+## Placeholder
+
+The name of placeholder file.
+
+## Force path style
+
+If enable ForcePathStyle, usually needed for minio.
+
+## List object version
+
+Refer to s3 sdk documents.
+
+## Remove bucket
+
+Remove bucket name from path when using custom host.
+
+## Add filename to disposition
+
+Add filename to Content-Disposition header.
+
+## Enable direct upload
+
+Enable direct front-end upload to S3.
+
+## Direct upload host
+
+The host for direct upload.
+
+## User agent
+
+Custom User-Agent for S3 requests. Leave empty to use the default generated by AWS SDK for Go (e.g. `aws-sdk-go/1.55.8 (go1.xx.x; ; )`).
+
+## Add object storage examples and official documents
+
+`S3 Object Storage` includes but is not limited to these. There are many more, such as Microsoft and Google, which have not been added. There are no examples here because it is difficult to register and activate and cannot provide example tutorials. If you have an account, please contact us and provide an account and I will add it.
+
+### Alibaba
+
+[**Alibaba Cloud OSS Official Website**](https://oss.console.aliyun.com/)
+
+[**Comparison Table of Endpoints in Different Regions of OSS under Public Cloud**](https://help.aliyun.com/document_detail/31837.html)
+
+::: tip
+OpenList needs to skip `referer` to mount **Alibaba Cloud Disk**. If you do not allow `referer` to be empty in anti-leech, it will not work, because Alibaba Cloud Disk uses Alibaba Cloud OSS (in Beijing area)
+
+In fact, the `Region|Region` option can be written as `Endpoint`, but for the sake of specification, let’s write it according to the comparison table.:::
+:::
+
+Fill in example:
+
+
+
+### Tencent
+
+[**Tencent Cloud COS Official Website**](https://console.cloud.tencent.com/cos)
+
+[**Collection Table of Endpoints in Each Region of COS under the Public Cloud**](https://cloud.tencent.com/document/product/436/6224)
+
+Fill in example:
+
+
+
+### VolcEngine
+
+[**VolcEngine TOS Official Website**](https://console.volcengine.com/tos)
+
+[**Collection Table of Endpoints in Each Region of COS under the Public Cloud**](https://www.volcengine.com/docs/6349/107356)
+
+Fill in example:
+
+
+
+### Tianyi
+
+[**Tianyi Cloud OOS Official Website**](https://oos-cn.ctyun.cn/oos/ctyun/consoleBucket.html)
+
+[**Comparison Table of Endpoints of OOS Regions under Public Cloud**](https://www.ctyun.cn/document/10026693/10027878)
+
+Fill in example:
+
+
+
+### Baidu
+
+[**Baidu Cloud BOS official website**](https://console.bce.baidu.com/bos)
+
+[**Self-configure Bucket’s Referer whitelist permissions**](https://cloud.baidu.com/doc/BOS/s/Bk6kqu8eq#Setrefererwhitelist)
+
+[**comparison table of Region and Endpoint of BOS under public cloud**](https://intl.cloud.baidu.com/doc/BOS/s/xjwvyq9l4-en)
+
+**Endpoint comparison table compatible with AWS S3**[**Click to view details**](https://cloud.baidu.com/doc/BOS/s/xjwvyq9l4)
+
+Fill in example:
+
+
+
+### Qiniu
+
+[**Qiniu Cloud Kodo official website**](https://portal.qiniu.com/kodo/bucket)
+
+[**Region and Endpoint comparison table of Kodo under the public cloud**](https://developer.qiniu.com/kodo/4088/s3-access-domainname)
+
+Fill in example:
+
+
+
+### Huawei
+
+[**HUAWEI CLOUD OBS Official Website**](https://www.huaweicloud.com/intl/en-us/)
+
+[**Check the Region and Endpoint comparison table of OBS under the public cloud**](https://developer.huaweicloud.com/intl/en-us/endpoint), the secret key AK/SK[acquire](https://console.huaweicloud.com/iam/?region=cn-north-4#/mine/accessKey) to set by yourself.
+
+Fill in example:
+
+
+
+### JD
+
+[**JD CLOUD OBS Official Website**](https://www.jdcloud.com/cn/products/object-storage-service)
+
+Advantages: [free 10G](https://www.jdcloud.com/cn/activity/oss), support IPV6
+
+Disadvantages: need to precharge 100 to open,However, after the pre-deposit is completed, the object storage is activated, and the pre-deposited amount can still be used after withdrawal.
+
+[**Region and Endpoint comparison table of Kodo under the public cloud**](https://docs.jdcloud.com/cn/object-storage-service/oss-endpont-list)
+
+Fill in example:
+
+
+
+### Doge
+
+[**Doge Cloud OSS Official Website**](https://www.dogecloud.com/product/oss),If you want to add Doge, use a separate `DogeCloud` driver to add, please do not use the `S3` the driver
+
+Region Code:
+
+```json
+// 0: 上海(华东),1: 北京(华北),2: 广州(华南),3: 成都(西南)
+```
+
+
+
+### 139
+
+[**139 CLOUD EOS Official Website**](https://console.ecloud.10086.cn/api/page/eos-console-web/CIDC-RP-00/eos/bucket?productType=os&v=new)
+
+[**Region and Endpoint comparison table of Kodo under the public cloud**](https://ecloud.10086.cn/op-help-center/doc/article/48082)
+
+Fill in example:
+
+
+
+### upyun
+
+[**Yupyun USS Official Website**](https://console.upyun.com/services/file/):[Click here to configure USS](./uss.md)
+
+### Amazon
+
+[**Amazon S3 Official Website**](https://s3.console.aws.amazon.com/s3/)
+
+The endpoint URL contains the name of the region where the bucket is located
+
+Example 1, if your bucket is in the US East (Ohio) region
+
+Then the format of the Endpoint URL is **`s3.us-east-2.amazonaws.com/your-bucket-name`**
+
+Region parameter: **`us-east-2`**
+
+Bucket name: **`your-bucket-name`** (your own bucket name)
+
+Example 2, my storage bucket is `Tokyo`, and the name of the storage bucket is `cdn-aw`, then the complete parameter filling is as follows
+
+1. **Endpoint**: s3.ap-northeast-1.amazonaws.com
+2. **Region**: ap-northeast-1
+3. **Bucket Name**: cdn-aw
+
+Let's take a look at the complete parameter filling example
+
+Fill in example:
+
+
+
+### Cloudflare R2
+
+[**Cloudflare R2 Official Website**](https://dash.cloudflare.com/)
+
+**Endpoint**: The S3 endpoint is available via the **`https://.r2.cloudflarestorage.com`** endpoint.
+
+**`ACCOUNT_ID`**: This account ID can be seen everywhere, and the simplest is the position at the top of the browser. The string of IDs behind the website link is your account ID.
+
+填写示例:
+
+
+
+### Backblaze B2
+
+[**B2 Official Website**](https://secure.backblaze.com/b2_buckets.htm)
+
+The full name is **`Backblaze`**, no verification information is required, and it is said that the first 10G is free.
+
+Fill in example:
+
+
+
+### Scaleway
+
+[**Scaleway Official Website**](https://console.scaleway.com/object-storage/buckets)
+
+Card required, verification information
+
+[**Region and Endpoint comparison table of Kodo under the public cloud**](https://www.scaleway.com/en/docs/storage/object/concepts/#object-storage)
+
+Fill in example:
+
+
+
+### Minio
+
+Those who use `Minio` self-built object storage should know how to obtain the ID and secret key, so I won’t talk about it here.
+
+You only need to fill in the four options of bucket name, access key ID, security access key, and Endpoint, and leave the region empty.
+
+**Endpoint:`http(s)://your-server:9001/`**, You can use IP or domain name
+
+Finally, remember to enable **`Force Path Style`** to use, otherwise it cannot be used [Click to view details](https://github.com/alist-org/alist/discussions/4920#discussioncomment-6635452)
+
+Fill in example:
+
+
+
+### Google Cloud
+
+I assume you already have a Google Cloud account, so let’s go directly to the Google Cloud Storage settings page:
+
+Then you will enter the following page:
+
+
+
+You can see Endpoint and Access Key on this page, you need to select an account and create an Access Key
+
+
+
+Access Key/Secret will be displayed on the new page, They will only be displayed this time. Please save them properly.
+
+
+
+At this point, the EndPoint, access key Id, and security access key required by OpenList have been obtained. Please view the remaining buckets and regions in the corresponding buckets.
+
+
+
+### Intranet access
+
+The server and object storage need to be in the same region, currently only supports `Alibaba Cloud OSS`. For example, if you are `Alibaba Cloud Hangzhou Server` and `Alibaba OSS in Hangzhou`, you can use it.
+
+- Previous behavior (taking Aliyun OSS as an example):
+ - Download link without custom host (using internal endpoint):
+
+ ```
+ https://.oss-cn-beijing-internal.aliyuncs.com/?X-Amz-Algorithm=***&X-Amz-Credential=***...
+ ```
+
+ - Download link within custom host (using external endpoint, the following link is **invalid**):
+
+ ```
+ https://.oss-cn-beijing.aliyuncs.com/
+ ```
+
+- Current behavior when `EnableCustomHostPresign` is `false`: Same as previous
+
+- Current behavior when `EnableCustomHostPresign` is `true` :
+ - Download link within custom host (using external endpoint, the following link is **valid**):
+
+ ```
+ https://.oss-cn-beijing.aliyuncs.com/?X-Amz-Algorithm=***&X-Amz-Credential=***...
+ ```
+
+### How to solve the problem of files with the same name as the folder
+
+After mounting the object storage and opening the folder, there is always a file with the same name as the folder that cannot be deleted or opened
+
+- The solution is to change the `List object version` in the configuration to V2, as shown in the following figure
+ 
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/seafile.md b/pages/en/guide/drivers/seafile.md
new file mode 100644
index 000000000..d9aa0d195
--- /dev/null
+++ b/pages/en/guide/drivers/seafile.md
@@ -0,0 +1,74 @@
+---
+top: 495
+categories:
+ - guide
+ - drivers
+---
+
+# Seafile
+
+Seafile uses libraries as a unit for version control and synchronization.
+
+Use this driver to mount a Seafile repository to OpenList, encrypted libraries are supported.
+
+## Root folder path
+
+1. If the `RepoId` is not set, this configuration specifies the name and sub-path of the library to access, defaulting to the root path: `/`, indicating displaying all libraries. Suppose you have a library named `example`, if you only want to mount the contents of this library, you can set this item to `/example`; if you only want to display a directory named `abc` within this library, you can set this item to `/example/abc`, and so on.
+2. If the `RepoId` is set, this configuration is used to set the directory within the specified library, defaulting to the root directory: `/`.
+
+## Address
+
+Your Seafile server address, e.g.
+
+- `https://seacloud.cc`
+- `http://192.168.1.24:8000`
+
+## Username
+
+The email or username used to log in to your Seafile server.
+
+## Password
+
+The password for your email or username.
+
+## Token
+
+Applicable to certain Seafile cloud storage systems integrated with enterprise/school unified authentication. For such cloud storage systems, there is no need to enter the username and password; only the token information needs to be filled in. Taking Tsinghua Cloud Disk as an example, the following steps can be used to obtain the token: `cookie` → `seahub_auth` → `"student ID@tsinghua.edu.cn@random string"`, where the random string is the token.
+
+## RepoId (Library ID)
+
+Seafile library ID, such as: `86fc6316-3f2a-4c64-b6f5-d4d2b341bc9a`
+
+- Open the Seafile library in a browser, and you can see the library ID in the address bar.
+- Can be left empty, if left empty, all visible libraries for the specified account will be displayed.
+
+## RepoPwd (Library Password)
+
+Set the password used to access encrypted libraries, leave blank if no encrypted libraries are present.
+
+After configuring this item, OpenList will use this password to access all encrypted libraries for the specified account, without affecting access to unencrypted libraries. If you have multiple encrypted libraries using the same password, they can all be accessed normally.
+
+Different passwords for different libraries within a storage are not currently supported. If you have such a requirement, you can add multiple Seafile storage to achieve this, allowing you to specify different passwords for accessing different encrypted libraries.
+
+If you still cannot access files within encrypted libraries after setting the library password, please check if the password and other configurations above are correct. It is recommended to restart OpenList after modifying this password configuration to avoid caching issues.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/sftp.md b/pages/en/guide/drivers/sftp.md
new file mode 100644
index 000000000..cd883b40d
--- /dev/null
+++ b/pages/en/guide/drivers/sftp.md
@@ -0,0 +1,49 @@
+---
+top: 897
+categories:
+ - guide
+ - drivers
+---
+
+# SFTP
+
+即通过 SSH 协议访问文件。
+
+## 地址
+
+SSH 地址,需要包含端口。
+
+## 用户名
+
+SSH 用户名
+
+## 密码
+
+SSH 密码
+
+## 私钥
+
+使用私钥验证而不是密码。
+
+## 根文件夹ID
+
+挂载的根路径
+
+## 默认使用的下载方式
+
+```mermaid
+---
+title: 默认使用的哪种下载方式?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[本机代理]:::someclass==默认===>a2[用户设备]
+ classDef someclass fill:#f96
+ b1[代理URL]-.备选.->a2[用户设备]
+ click b1 "../drivers/common.html#webdav-策略"
+ click c1 "../drivers/common.html#webdav-策略"
+```
diff --git a/pages/en/guide/drivers/smb.md b/pages/en/guide/drivers/smb.md
new file mode 100644
index 000000000..5389d81d4
--- /dev/null
+++ b/pages/en/guide/drivers/smb.md
@@ -0,0 +1,32 @@
+---
+top: 896
+categories:
+ - guide
+ - drivers
+---
+
+# SMB
+
+It is to mount smb to OpenList, instead of sharing OpenList through smb, instead of sharing smb like webdav.
+Because there are no related equipment and services, it is impossible to test. You can test it yourself according to the method provided in the **`GitHub Discussions`** discussion
+**https://github.com/alist-org/alist/discussions/2215#discussioncomment-4104018**
+Wait for the more detailed tutorials to be supplemented after the relevant equipment or services are available, or wait for the PR of the boss who has no problem with the test.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/storage-list.md b/pages/en/guide/drivers/storage-list.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/en/guide/drivers/strm.md b/pages/en/guide/drivers/strm.md
new file mode 100644
index 000000000..3ba57d36c
--- /dev/null
+++ b/pages/en/guide/drivers/strm.md
@@ -0,0 +1,10 @@
+---
+top: 990
+categories:
+ - guide
+ - drivers
+---
+
+# Strm
+
+
diff --git a/pages/en/guide/drivers/strm_text.md b/pages/en/guide/drivers/strm_text.md
new file mode 100644
index 000000000..f1285d45a
--- /dev/null
+++ b/pages/en/guide/drivers/strm_text.md
@@ -0,0 +1,100 @@
+**Strm** is a driver that allows you to convert supported files from multiple cloud drives into .strm files.
+
+::: warning Important Notes
+Please understand the function of strm files before use
+
+Only the **`Download Preview (Read-Only)`** operation is supported. Other operations such as **Copy, Delete, Rename,
+Offline Download, Upload** are **not supported**.
+
+Strm uses a local proxy method, and during the **`Download Preview (Read-Only)`** operation, it will consume traffic
+from the deployed machine (depending on the number of files; individual files typically consume less than 100KB).
+:::
+
+### Parameter Descriptions
+
+#### Path
+
+The full path in OpenList where .strm files should be generated.
+Examples:
+
+```
+/115_open/Video
+/kuake_open/Video
+```
+
+#### Site URL
+
+The URL prefix for the generated .strm files.
+
+For example, if the directory /115_open/Video contains the file:`/电影/再见,李可乐 (2023)/再见,李可乐 (2023) - 2160p.mkv`
+
+And you enter http://localhost:5244 as the Site URL, the generated .strm file will point to:
+`http://localhost:5244/d/115_open/Video/电影/再见,李可乐 (2023)/再见,李可乐 (2023) - 2160p.strm`
+
+This field is optional. If left blank, the current access URL will be used as the default prefix.
+
+#### File Type Filter
+
+Specify which file types should be included for .strm generation.
+
+The following types are built-in:
+
+```
+Video Type
+mp4,mkv,flv,avi,wmv,ts,rmv,web
+
+Audio Type
+mp3,flac,aac,wav,ogg,m4a,wma,alac
+```
+
+You can add more types as needed. Use **commas (,)** to separate multiple file types.
+
+#### Encode Path
+
+Whether to enable URL path encoding.
+
+If disabled, the .strm URL will be:
+
+```
+http://localhost:5244/d/Video/电影/再见,李可乐 (2023)/再见,李可乐 (2023) - 2160p.strm
+```
+
+If enabled, it will be:
+
+```
+http://localhost:5244/d/Video/%E7%94%B5%E5%BD%B1/%E5%86%8D%E8%A7%81%EF%BC%8C%E6%9D%8E%E5%8F%AF%E4%B9%90%20(2023)/%E5%86%8D%E8%A7%81%EF%BC%8C%E6%9D%8E%E5%8F%AF%E4%B9%90%20(2023)%20-%202160p.mkv
+```
+
+#### Without Url
+
+The generated strm file will not contain URL prefixes
+
+#### SaveStrmToLocal
+
+When enabled, accessing a directory within or mounted by the Strm driver will save the Strm files locally
+
+#### SaveStrmLocalPath
+
+The local directory path where Strm files are stored.
+
+#### KeepLocalDownloadFile
+
+::: warning
+Warning: Deprecated parameter, removed in version 4.1.9 and will be removed in future versions
+:::
+
+#### Local Save Mode
+
+- `Insert Mode`: Only generate files that do not exist locally; existing local files will not be modified.
+- `Update Mode`: Generate files that do not exist locally and update the content of existing local files to the latest
+ version.
+- `Sync Mode`: Based on Update Mode, additionally delete local files that no longer exist on the cloud drive.
+
+> if you need scraper software to read local strm files and generate metadata files, please choose `Update Mode` to ensure that the content of local strm files is up to date and metadata files are not deleted
+
+### Actively generate local files
+
+The local file generation feature only takes effect when users access the corresponding directory. To recursively generate files for all paths, you can use the **Manually Scan** function, located under `Manage Page / Indices / Manually Scan`. In the **Path to scan** field, enter the **mount path of the Strm driver**, and in the **Rate limit** field, specify the API rate limit for the scanning process. Click start and wait for completion.
+
+Enabling the [Global Settings / Handle hook after writing](/en/configuration/global#handle-hook-after-writing) allows local files to be automatically generated after performing upload, rename, delete, move, copy, or extraction operations either under the original driver.
+Scheduled or automatic local file generation by listening for driver changes is not currently supported.
diff --git a/pages/en/guide/drivers/teambition.md b/pages/en/guide/drivers/teambition.md
new file mode 100644
index 000000000..ecdbcc5c9
--- /dev/null
+++ b/pages/en/guide/drivers/teambition.md
@@ -0,0 +1,43 @@
+---
+top: 681
+categories:
+ - guide
+ - drivers
+---
+
+# Teambition
+
+
+
+Teambition project file, supports Chinese server and international server.
+
+## Cookies
+
+After login, the validity period is unknown
+
+
+## Project ID and root folder id
+
+Get it from the URL after logging in
+
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/teldrive.md b/pages/en/guide/drivers/teldrive.md
new file mode 100644
index 000000000..eca0f3395
--- /dev/null
+++ b/pages/en/guide/drivers/teldrive.md
@@ -0,0 +1,82 @@
+---
+top: 586
+categories:
+ - guide
+ - drivers
+---
+
+# Teldrive
+
+
+
+Teldrive is a Telegram-based cloud storage app maintained by a third-party open-source project: [tgdrive/teldrive](https://github.com/tgdrive/teldrive).
+
+**Highlights**
+
+- Unlimited storage
+- No file size limit
+- If you don’t subscribe to Telegram Premium, bandwidth is limited, and speed depends on the distance and bandwidth quality between your account’s data center (DC1–DC5) and the Teldrive server.
+
+Backend deployment requires a **Telegram API (not Bot API)**. See the official guide: [Teldrive installation](https://teldrive-docs.pages.dev/docs/getting-started/prerequisites)
+
+## Address
+
+Enter the base URL of your Teldrive backend **without** a trailing slash.
+
+Example: `https://teldrive.example.com`
+
+## Authentication (Cookie)
+
+Only **Cookie** authentication is supported.
+
+After logging in to the Teldrive web UI, grab the cookie from your browser.
+
+The cookie should **start with** `access_token=` and is a JWT.
+
+
+
+::: tip
+You only need the string **containing** `access_token=`.
+:::
+
+## Download methods
+
+**Note**: If `Use Share Link` is enabled, a shared file link is created and the download URL is valid for **1 hour**.
+
+Otherwise, you need to enable OpenList's `Web Proxy`.
+
+## Chunk size
+
+Upload chunk size in **MiB**.
+
+Default: `10` (10 MiB). If large uploads fail, try a smaller value.
+
+If the chunk size is larger than the file size, the file is uploaded in a single thread without chunking.
+
+## Upload Concurrency
+
+Concurrent upload threads. Default: `4`.
+
+Adjust based on available memory. A handy estimate is:
+`memory ≈ chunk_size × concurrency`
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/terabox.md b/pages/en/guide/drivers/terabox.md
new file mode 100644
index 000000000..039059fbc
--- /dev/null
+++ b/pages/en/guide/drivers/terabox.md
@@ -0,0 +1,67 @@
+---
+top: 594
+categories:
+ - guide
+ - drivers
+---
+
+# Terabox
+
+
+
+https://www.terabox.com/
+
+## Refresh Token
+
+~~[**Click here to log in**](https://www.terabox.com/) to obtain a refresh token~~
+Since F12 is currently disabled on the web page, we can first open F12 on another page and turn on the `Network` → `Preserve log` option.
+
+Then enter https://www.terabox.com in the address bar of this tab to enter the webpage, you can see the reserved request, and then find **`Cookie`** from the reserved request.
+
+
+
+## Download Api
+
+**Download api needs to choose `Crack`** ,before you can use
+
+
+## Root folder id
+
+- Root folder id is `/`
+- Mount other single subdirectories, put a picture for reference
+ -
+
+## Download error using Proxy Url link
+
+Using [**Proxy Url**](common.md#download-proxy-url) to download error
+
+```json
+{
+ "error_code": 31211,
+ "error_msg": "access denied"
+}
+```
+
+View specific reasons:**[https://github.com/alist-org/alist/issues/6508](https://github.com/alist-org/alist/issues/6508#issuecomment-2171762705)**
+
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/thunder.md b/pages/en/guide/drivers/thunder.md
new file mode 100644
index 000000000..7c81ff4f3
--- /dev/null
+++ b/pages/en/guide/drivers/thunder.md
@@ -0,0 +1,498 @@
+---
+top: 685
+categories:
+ - guide
+ - drivers
+---
+
+# Thunder Cloud Disk
+
+
+
+::: tip
+Please use `Thunder` directly instead of `ThunderExpert` if you are not good at it.
+
+`ThunderExpert` mainly provides more free settings and realizes more login methods
+
+---
+
+`Thunder X` serves overseas users. As of the time of document release, only the Android version is available. Other versions have not yet been released.
+
+- Thunder X has sufficient speed even without membership. Future changes are unknown.
+- Using the APP may require a proxy, but not when mounted on OpenList.
+
+---
+
+`Thunder Browser`:Currently only supports mobile phones (Android, iOS)
+
+- **https://x.xunlei.com/**
+- If you log in to OpenList, the mobile phone will be kicked offline. On the contrary, if you log in to OpenList first and then log in to the mobile phone, OpenList will be kicked offline but there will be no prompt
+
+:::
+
+## 1. Thunder
+
+### Username
+
+That is, the mobile phone number, email, and username used for login (there is a probability that you cannot log in, you need to try)
+
+1. Before obtaining the verification code, do not include the `+86` country code when entering the phone number.
+2. After obtaining the verification code, the phone number must include the `+86` country code, for example: +8613722223333.
+
+### Password
+
+password for login
+
+
+
+### Credit Key
+
+After saving for the first time, an error will occur. This is normal. Please go to the storage management interface.
+
+
+
+Copy all the content above.
+
+[Click here to enter](https://i.xunlei.com/xlcaptcha/android.html)
+
+After entering, open the developer tools (usually by pressing F12), go to the console, and enter `reviewCb()`. **Paste all the previously copied content, including the curly braces,** inside the parentheses, as shown below:
+
+
+
+Move the cursor to **after the parentheses** and press Enter.
+
+
+
+The webpage will automatically redirect to the mobile number verification page.
+
+After completing the verification, the page **will not** refresh automatically. Please check the console. The `creditkey` shown below is the required key.
+
+
+Copy it to the storage management, and you can mount it normally.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 2. ThunderExpert
+
+::: tip
+If Xunlei needs to download, you must specify UserAgent (same as DownUserAgent below). Or use the proxy function in this program to transfer.
+:::
+
+### Login Type
+
+1. When selecting User, you only need to fill in the username and password
+ - User You need to bring the `+86` area code, for example +8613722223333 fill in like this
+2. **RefreshToken**: Just fill in RefreshToken when selecting RefreshToken
+
+### Signature Type
+
+**Algorithms**:When selecting Algorithms, just fill in the Algorithms (it is difficult to obtain, and needs to be reversed)
+
+**Captcha sign**: Only fill in CaptchaSign and Timestamp when selecting CaptchaSign
+
+```
+//signature algorithm
+str = ClientID + ClientVersion + PackageName + DeviceID + Timestamp
+for (Algorithm in Algorithms) {
+ str = md5(str + Algorithm)
+}
+CaptchaSign = "1." + str
+```
+
+Login type and Sign type recommended options
+
+
+
+### DeviceID
+
+The value calculated by md5 is used to determine the logged in device
+
+### ClientID, ClientSecret, ClientVersion, PackageName
+
+It is related to the signature, fill in according to the actual situation
+
+### UserAgent
+
+UserAgent used by API requests, may be inaccessible or speed limited if the setting is incorrect
+
+### DownUserAgent
+
+The User Agent used for downloading, if the setting is wrong, it will not be downloaded (it will be used when the agent is turned on) Fixed parameters:
+
+`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36`
+
+### Key data acquisition process
+
+Obtain Xunlei request data through network analysis tools (packet capture tools) --- Please read the following information carefully
+
+Open Xunlei and log in to your account (the picture below uses the PC client to operate, and the web terminal is also available)
+
+Included in the request https://xluser-ssl.xunlei.com/v1/shield/captcha/init
+
+CaptchaSign, Timestamp, DeviceID, ClientID, ClientVersion, PackageName, User-Agent
+
+**Note**: After obtaining the information of the two pictures, slowly select the data from the two data captured and fill in it
+
+After logging in to Thunder and opening the packet capture tool, it is possible that the information of **v1/shield/captcha/init** cannot be immediately obtained at this time.
+
+Do not close the Xunlei PC client and the packet capture tool, just wait, it will refresh automatically after **5 minutes**
+
+You will see the parameters as shown in the figure below, and you can fill in it according to the acquisition (if you can't see it clearly, you can right-click to copy the picture and link it to the browser to open a new window)
+
+See **v1/shield/captcha/init** and grab it, please **immediately don't delay for a second** Right-click Xunlei in the taskbar in the lower right corner to exit, exit completely and then reopen to get \* \*Figure II\*\*
+
+
+
+Restarting Thunder will refresh the token
+
+The request to https://xluser-ssl.xunlei.com/v1/auth/token contains RefreshToken (please use the returned value), ClientSecret (does not exist on the web side)
+
+
+Figure 1 contains **7** parameters | Figure 1 contains **2** parameters | a fixed parameter (Down UserAgent), ten parameters and 3 options and a mount path, just write and save, before saving Remember to check~
+
+When the `Video URL` option is enabled, it will attempt to replace the original link with the media link returned by the API. Currently, the official platform throttles the download link for **non-members**, but video streaming is not throttled. Therefore, by replacing the link, you can avoid throttling, which applies to both **OpenList** media file downloads and streaming. For regular files, you can also bypass the throttling by renaming the file extension to a media format (e.g., `.mp4`).
+
+The **Expert Edition** does not enable the `Video URL` option by default, as it is intended for users who configure detailed parameters themselves, and they should be aware of the significance of this option. Hence, it is not enabled by default. For **Xunlei X** users, this option is enabled by default, primarily for the convenience of less experienced users.
+
+### ThunderExpert complete parameter filling demo:
+
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 3. Thunder X
+
+::: danger
+At present, the official will ban frequent API calls. Please use with caution and bear the consequences.
+:::
+
+### username、password
+
+The mailbox and password used for login
+
+
+### CaptchaToken
+
+It will be filled automatically without filling in manually
+
+
+### Root folder id
+
+The default is the full directory of the empty display, If you want to use a subfolder to make the root directory, grab the request to get it
+
+- In the request in the package`https://api-pan.xunleix.com/drive/v1/files?parent_id=&page_token=&filters=`,you can get the following parameters
+ - `文件夹ID(id)`
+ - `文件夹名称(name)`
+ - `父文件夹ID(parent_id)`
+- The `folder ID` obtained in the root directory (for example : `我接收的文件`、`我的云盘`、`高速云下载`), **This will change with different account numbers, there is no the same value, In the request in the package**
+ 
+
+### Use video url
+
+When the `Video URL` option is enabled, it will attempt to replace the original link with the media link returned by the API. Currently, the official platform throttles the download link for **non-members**, but video streaming is not throttled. Therefore, by replacing the link, you can avoid throttling, which applies to both **OpenList** media file downloads and streaming. For regular files, you can also bypass the throttling by renaming the file extension to a media format (e.g., `.mp4`).
+
+The **Expert Edition** does not enable the `Video URL` option by default, as it is intended for users who configure detailed parameters themselves, and they should be aware of the significance of this option. Hence, it is not enabled by default. For **Xunlei X** users, this option is enabled by default, primarily for the convenience of less experienced users.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 4. Thunder X Expert
+
+::: danger
+At present, the official will ban frequent API calls. Please use with caution and bear the consequences.
+:::
+
+### username、password
+
+The mailbox and password used for login
+
+
+### CaptchaToken
+
+It will be filled automatically without filling in manually
+
+
+### Root folder id
+
+The default is the full directory of the empty display, If you want to use a subfolder to make the root directory, grab the request to get it
+
+- In the request in the package`https://api-pan.xunleix.com/drive/v1/files?parent_id=&page_token=&filters=`,you can get the following parameters
+ - `文件夹ID(id)`
+ - `文件夹名称(name)`
+ - `父文件夹ID(parent_id)`
+- The `folder ID` obtained in the root directory (for example : `我接收的文件`、`我的云盘`、`高速云下载`), **This will change with different account numbers, there is no the same value, In the request in the package**
+ 
+
+### Login Type
+
+- `User`: Only fill in the username and password
+- `Refresh token`: Just fill in`RefreshToken`
+
+### Sign Type
+
+- `Algorithms`:Choose `Algorithms` Just fill in `Algorithms` (It has been automatically filled. You do n’t have to fill in it yourself. You only need to fill in the username and password.When the algorithm is not invalidated)
+- `Captcha sign`: Choose `Captcha sign` Just fill in `Captcha sign` and `Timestamp`
+
+### Part of parameter Packet Capture description
+
+- `Captcha token`:No need to fill in
+- `Device id`:The value calculated by MD5 is used to judge the login device
+- `Client id`, `Client secret`, `Client version`, `Package name`:It related to the signature, fill in according to the actual situation
+
+---
+
+- `User agent`:API requests `User agent`, setting errors may not access or speed limit
+- `Download user agent`:When downloading, use the `user agent `,If the setting error cannot be downloaded (the agent will use it)
+ - `User agent` and `Download user agent`:You can fill it out by yourself. If you don’t know how to fill it out, you can leave it blank and it will be automatically filled in.
+
+---
+
+In the request in the package `https://xluser-ssl.xunleix.com/v1/shield/captcha/init`,you can get the following parameters6
+
+- `Client id`、`Device id`、`Captcha sign`
+- `Package name`、`Client version`、`Timestamp`
+
+ 
+
+ In the request in the package `https://xluser-ssl.xunleix.com/v1/auth/signin`, you can get the following parameters2
+ - `Client id`、`Client secret`
+ 
+
+### Use video url
+
+When the `Video URL` option is enabled, it will attempt to replace the original link with the media link returned by the API. Currently, the official platform throttles the download link for **non-members**, but video streaming is not throttled. Therefore, by replacing the link, you can avoid throttling, which applies to both **OpenList** media file downloads and streaming. For regular files, you can also bypass the throttling by renaming the file extension to a media format (e.g., `.mp4`).
+
+The **Expert Edition** does not enable the `Video URL` option by default, as it is intended for users who configure detailed parameters themselves, and they should be aware of the significance of this option. Hence, it is not enabled by default. For **Xunlei X** users, this option is enabled by default, primarily for the convenience of less experienced users.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 5. Thunder Browser
+
+### username、password
+
+Mobile phone number, email, username, and password used to log in
+
+- When filling in the mobile phone number, please bring the `+86` area code, for example `+8613822334455`
+
+### CaptchaToken
+
+It will be filled automatically without filling in manually
+
+### Root folder id
+
+The default is the full directory of the empty display, If you want to use a subfolder to make the root directory, grab the request to get it
+
+- In the request in the package`https://x-api-pan.xunlei.com/drive/v1/files?parent_id&page_token&space=`,you can get the following parameters
+ - `文件夹ID(id)`
+ - `文件夹名称(name)`
+ - `父文件夹ID(parent_id)`
+- The `folder ID` obtained in the root directory (for example : `来自分享`、`超级保险箱`), **This will change with different account numbers, there is no the same value, In the request in the package**
+ 
+
+### Safe password
+
+Thunder Browser Safe password
+
+- Files in Safe password can only be deleted directly and cannot be deleted to the recycle bin, so the [**Deletion method**](#remove-way) below has nothing to do with this configuration.
+
+### Remove way
+
+**Trash**:Use OpenList to delete files and then move them to the Recycle Bin. If you delete them accidentally, you can restore them through Thunder Cloud Disk.
+**Delete**:Deleting it directly cannot restore it.
+
+### Use video url
+
+When the `Video URL` option is enabled, it will attempt to replace the original link with the media link returned by the API. Currently, the official platform throttles the download link for **non-members**, but video streaming is not throttled. Therefore, by replacing the link, you can avoid throttling, which applies to both **OpenList** media file downloads and streaming. For regular files, you can also bypass the throttling by renaming the file extension to a media format (e.g., `.mp4`).
+
+The **Expert Edition** does not enable the `Video URL` option by default, as it is intended for users who configure detailed parameters themselves, and they should be aware of the significance of this option. Hence, it is not enabled by default. For **Xunlei X** users, this option is enabled by default, primarily for the convenience of less experienced users.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## 6. Thunder Browser Expert
+
+### username、password
+
+Mobile phone number, email, username, and password used to log in
+
+- When filling in the mobile phone number, please bring the `+86` area code, for example `+8613822334455`
+
+### CaptchaToken
+
+It will be filled automatically without filling in manually
+
+
+### Root folder id
+
+The default is the full directory of the empty display, If you want to use a subfolder to make the root directory, grab the request to get it
+
+- In the request in the package`https://x-api-pan.xunlei.com/drive/v1/files?parent_id&page_token&space=`,you can get the following parameters
+ - `文件夹ID(id)`
+ - `文件夹名称(name)`
+ - `父文件夹ID(parent_id)`
+- The `folder ID` obtained in the root directory (for example : `来自分享`、`超级保险箱`), **This will change with different account numbers, there is no the same value, In the request in the package**
+ 
+
+### Safe password
+
+Thunder Browser Safe password
+
+- Files in Safe password can only be deleted directly and cannot be deleted to the recycle bin, so the [**Deletion method**](#remove-way-1) below has nothing to do with this configuration.
+
+### Remove way
+
+**Trash**:Use OpenList to delete files and then move them to the Recycle Bin. If you delete them accidentally, you can restore them through Thunder Cloud
+**Delete**:Deleting it directly cannot restore it.
+
+### Login Type
+
+- `User`: Only fill in the username and password
+- `Refresh token`: Just fill in`RefreshToken`
+
+### Sign Type
+
+- `Algorithms`:Choose `Algorithms` Just fill in `Algorithms` (It has been automatically filled. You do n’t have to fill in it yourself. You only need to fill in the username and password.When the algorithm is not invalidated)
+- `Captcha sign`: Choose `Captcha sign` Just fill in `Captcha sign` and `Timestamp`
+
+### Part of parameter Packet Capture description
+
+- `Captcha token`:No need to fill in
+- `Device id`:The value calculated by MD5 is used to judge the login device
+- `Client id`, `Client secret`, `Client version`, `Package name`:It related to the signature, fill in according to the actual situation
+
+---
+
+- `User agent`:API requests `User agent`, setting errors may not access or speed limit
+- `Download user agent`:When downloading, use the `user agent `,If the setting error cannot be downloaded (the agent will use it)
+ - `User agent` and `Download user agent`:You can fill it out by yourself. If you don’t know how to fill it out, you can leave it blank and it will be automatically filled in.
+
+---
+
+In the request in the package `https://xluser-ssl.xunlei.com/v1/shield/captcha/init`,you can get the following parameters6
+
+- `Client id`、`Device id`、`Captcha sign`
+- `Package name`、`Client version`、`Timestamp`
+ 
+
+ In the request in the package `https://xluser-ssl.xunlei.com/v1/auth/signin/token`, you can get the following parameters3
+ - `Client id`、`Client secret`、`Refresh token`
+
+ 
+
+### Use video url
+
+When the `Video URL` option is enabled, it will attempt to replace the original link with the media link returned by the API. Currently, the official platform throttles the download link for **non-members**, but video streaming is not throttled. Therefore, by replacing the link, you can avoid throttling, which applies to both **OpenList** media file downloads and streaming. For regular files, you can also bypass the throttling by renaming the file extension to a media format (e.g., `.mp4`).
+
+The **Expert Edition** does not enable the `Video URL` option by default, as it is intended for users who configure detailed parameters themselves, and they should be aware of the significance of this option. Hence, it is not enabled by default. For **Xunlei X** users, this option is enabled by default, primarily for the convenience of less experienced users.
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/uc.md b/pages/en/guide/drivers/uc.md
new file mode 100644
index 000000000..7f6cf7d67
--- /dev/null
+++ b/pages/en/guide/drivers/uc.md
@@ -0,0 +1,85 @@
+---
+top: 683
+categories:
+ - guide
+ - drivers
+---
+
+# UC / TV
+
+
+
+## UC Cloud
+
+**https://drive.uc.cn/**
+
+### Cookie
+
+Press F12 to open "Debug", select "Network", select any request on the left, and find the one with the `Cookie` parameter.
+
+
+### Root Folder ID
+
+Root Folder ID is `0`
+
+- After entering the folder, get the directory ID in the top address bar. If the subdirectory is deeper, the directory ID will be at the back of the address bar. Just write the subdirectory ID you want to mount.
+ 
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
+
+## UC TV
+
+The TV version supports `302`, but only `List` and `Download` operations are supported. Other operations are not supported (the interface does not support it).
+
+### Add method
+
+1. Select the `UC TV` driver, fill in the mounting path, and then save
+2. Return to the all driver page and use the mobile APP to scan the QR code (If the QR code is not displayed, click on `Table Layout` in the upper right corner of the driver to switch from list mode to table mode)
+3. After scanning the QR code to confirm, disable the driver, then enable the `driver` to use it.
+ - `Refresh token`、`Device id`、`Query token`,It will be filled in automatically, no manual filling is required - Please do not edit manually and modify it
+ 
+
+### Root Folder ID
+
+Root Folder ID is `0`
+
+- After entering the folder, get the directory ID in the top address bar. If the subdirectory is deeper, the directory ID will be at the back of the address bar. Just write the subdirectory ID you want to mount.
+ 
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/url_tree.md b/pages/en/guide/drivers/url_tree.md
new file mode 100644
index 000000000..d53b55613
--- /dev/null
+++ b/pages/en/guide/drivers/url_tree.md
@@ -0,0 +1,248 @@
+---
+top: 998
+categories:
+ - guide
+ - drivers
+---
+
+# UrlTree
+
+:::tip
+**`地址树-UrlTree`** 是什么? 是用来挂载单个文件链接的,详情可以查看 **→→→[原需求说明](https://github.com/alist-org/alist/issues/3268)←←←**
+:::
+
+## 可写
+
+打开后可以对此驱动进行`新建文件夹`、`移动`、`重命名`、`复制`、`删除`、`PutURL`
+
+- 当用户在实现该接口的驱动中尝试使用SimpleHttp进行离线下载时,将不会调用离线下载工具。 相反,将调用驱动程序的 `PutURL` 方法。
+- **https://github.com/AlistGo/alist/pull/7779**
+
+
+
+## 用法
+
+具体的用法大概讲解一下,建议将下面不同用法都看看越往后越进阶玩法
+
+别看写的看起来很难很啰嗦实际上自己操作一下秒懂。
+
+1. 最简单的用法,直接写链接即可
+
+**输入**
+
+```
+http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+```
+
+**输出**
+
+```
+│ aff9c9c8817d943d6857a73188958d45.jpeg
+│ README_cn.md
+```
+
+2. 有文件的同时,也可以创建文件夹第一个代码示例,也可以创建多个文件夹第二个代码示例
+
+**输入**
+
+```
+http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+folder:
+ http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+ https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+```
+
+```
+http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+folder:
+ http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+ https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+http://pic.rmb.bdstatic.com/bjh/a66923e9bfefd03c2998ee998d3b55e7.jpeg
+folder2:
+ http://pic.rmb.bdstatic.com/bjh/e919290bf3b8396817d369cedf33b8cd.jpeg
+ https://raw.githubusercontent.com/OpenListTeam/OpenList/main/CONTRIBUTING.md
+```
+
+**输出**
+
+```
+│ aff9c9c8817d943d6857a73188958d45.jpeg
+└─folder
+ aff9c9c8817d943d6857a73188958d45.jpeg
+ README_cn.md
+```
+
+```
+│ aff9c9c8817d943d6857a73188958d45.jpeg
+├─folder
+│ aff9c9c8817d943d6857a73188958d45.jpeg
+│ README_cn.md
+│
+├─ a66923e9bfefd03c2998ee998d3b55e7.jpeg
+│
+└─folder2
+ CONTRIBUTING.md
+ e919290bf3b8396817d369cedf33b8cd.jpeg
+```
+
+开头要空两个空格~
+
+3. 可以将文件资源二次命名,实际上下载的还是原来的,并且可以填写文件大小
+
+格式:`新命名的名字.后缀:文件大小:链接.后缀`
+
+```
+新名称.jpeg:1024:http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+新名称2.md:2048:https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+```
+
+文件大小不用写也是可以重新命名的
+
+```
+新名称.jpeg:http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+新名称2.md:https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+```
+
+@tab 4
+
+4. 多个层级目录套娃玩法
+
+- 第一层目录文件夹不需要空格,但是第一层目录里面的文件需要空两个空格
+
+```
+folder:
+ http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
+ https://raw.githubusercontent.com/OpenListTeam/OpenList/main/README_cn.md
+```
+
+- 如果你写好第一层了还想在第一个文件夹里面再套一个那就在这个文件夹下面套一层,写法如下,很简单
+ - 目录进行空两格,文件加两个空格就是四个,如果继续想往下套一层继续加2个空格即可
+
+```
+folder11:
+ http://pic.rmb.bdstatic.com/bjh/111.jpeg
+ folder111:
+ http://pic.rmb.bdstatic.com/bjh/111.jpeg
+ folder1111:
+ http://pic.rmb.bdstatic.com/bjh/111.jpeg
+ folder222:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder2222:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+folder22:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder222:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder2222:
+ http://pic.rmb.bdstatic.com/bjh/2223.jpeg
+folder33:
+ http://pic.rmb.bdstatic.com/bjh/333.jpeg
+ folder333:
+ http://pic.rmb.bdstatic.com/bjh/333.jpeg
+ folder3333:
+ http://pic.rmb.bdstatic.com/bjh/333.jpeg
+```
+
+- 不建议的写法,像 **`2.jpeg,5.jpeg`** 这样写法,建议想往哪一层文件夹就去哪一层文件夹按照格式增加链接,不要像下面这样写
+
+**错误写法**
+
+```
+folder22:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder222:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder2222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+ folder22222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+ folder222222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+ http://pic.rmb.bdstatic.com/bjh/2.jpeg
+ http://pic.rmb.bdstatic.com/bjh/5.jpeg
+```
+
+**正确写法**
+
+像 **`2.jpeg,5.jpeg`** 这样文件添加时候,添加到对应的目录里面去,分别对应的是 `folder222 和 folder22222` 两个文件夹
+
+```
+folder22:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ folder222:
+ http://pic.rmb.bdstatic.com/bjh/222.jpeg
+ http://pic.rmb.bdstatic.com/bjh/2.jpeg
+ folder2222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+ folder22222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+ http://pic.rmb.bdstatic.com/bjh/5.jpeg
+ folder222222:
+ http://pic.rmb.bdstatic.com/bjh/2222.jpeg
+```
+
+5. 全部整合起来的举例用法,有常规的,有分类,有重命名,有标注文件大小
+
+```
+https://jsd.example.com/gh/OpenListTeam/OpenList/README.md
+文档:
+ Readme.md:https://pic.rmb.bdstatic.com/bjh/说明.md
+ Doc:
+ 文档.doc:https://pic.rmb.bdstatic.com/bjh/测试文档.doc
+ pdf:
+ pdf2.pdf:https://pic.rmb.bdstatic.com/bjh/测试.pdf
+ Excel:
+ 表格3.xlsx:https://pic.rmb.bdstatic.com/bjh/测试表格.xlsx
+视频:
+ https://pic.rmb.bdstatic.com/bjh/222.jpeg
+ 电视剧:
+ https://pic.rmb.bdstatic.com/bjh/222.pm4
+ 电影:
+ https://pic.rmb.bdstatic.com/bjh/222.flv
+音乐:
+ https://pic.rmb.bdstatic.com/bjh/222.jpeg
+ 古典:
+ https://pic.rmb.bdstatic.com/bjh/222.mp3
+ 轻音乐:
+ https://pic.rmb.bdstatic.com/bjh/222.flac
+ https://pic.rmb.bdstatic.com/bjh/222.wav
+软件:
+ https://pic.rmb.bdstatic.com/bjh/222.jpeg
+ PJ:
+ xx软件.exe:252525:https://pic.rmb.bdstatic.com/bjh/222.exe
+ xx安装包.zip:259555:https://pic.rmb.bdstatic.com/bjh/222.zip
+ IPA:
+ GPT.ipa:https://pic.rmb.bdstatic.com/bjh/222.ipa
+ APK:
+ P图.apk:https://pic.rmb.bdstatic.com/bjh/222.apk
+```
+
+## 提示
+
+1. 如果你点击下载发现没有跳转到下载而是预览,这是因为是根据你原本链接来决定的,例如你原本的链接就是下载他就会跳转到下载
+2. 如果你一个文件夹内有相同的文件,会合并只显示一个,默认使用预览查看下载的是你靠上(前)也就是顶部的文件
+ - Tips:请勿同时在一个目录内新建两个同名的文件/夹哦~就像你在资源管理器新建两个一样的文件/夹 都会提醒你不能重复
+3. 如果你在添加时在同级目录下写了两个相同的文件夹名字,会合并成一个文件夹但是合并后靠后(下)的文件夹的文件不会显示,但是可以通过浏览器地址栏访问(参考上一条的提示)
+4. 排序默认是按照你填写从上到下依次排序的和 `OpenList-别名`的一样
+
+### 默认使用的下载方式
+
+```mermaid
+---
+title: 默认使用的哪种下载方式?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|默认|a2[用户设备]
+ classDef someclass fill:#f96
+ c1[本机代理]-.备选.->a2[用户设备]
+ b1[代理URL]-.备选.->a2[用户设备]
+ click a1 "../drivers/common.html#webdav-策略"
+ click b1 "../drivers/common.html#webdav-策略"
+ click c1 "../drivers/common.html#webdav-策略"
+```
diff --git a/pages/en/guide/drivers/uss.md b/pages/en/guide/drivers/uss.md
new file mode 100644
index 000000000..33fc787f6
--- /dev/null
+++ b/pages/en/guide/drivers/uss.md
@@ -0,0 +1,77 @@
+---
+top: 894
+categories:
+ - guide
+ - drivers
+---
+
+# UPYUN Storage Service
+
+::: tip
+When using the **302 redirect** strategy, the `_upd` and `_upt` parameters are automatically appended to the URL. If **"Parameter Follow"** is enabled in the Upyun console, the CDN nodes will treat these parameters as part of the file path, resulting in a **404 Not Found** error for existing files.
+
+Solutions:
+
+- Method 1: In the Upyun console, under **"Cache Control"**, change **"Parameter Follow"** to **"Parameter Not Follow"**.
+
+- Method 2: Set the WebDAV policy of OpenList to **"Local Proxy"**. This mode avoids appending interfering parameters but will increase the server's data transfer.
+ :::
+
+UPYUN Storage Service,refer to as USS,[**Yupyun USS Official Website**](https://console.upyun.com/services/file/)
+
+### BucKet
+
+UPYUN Storage Service Name
+
+### Endpoint
+
+Accelerated domain name (default TEST domain or bound domain, not CNAME domain)
+If you use http protocol, please add `http://` protocol header.
+The test domain name provided by upyun is not accessible in some network and does not support https, so it is recommended to use your own bound domain name.
+
+### Operator name
+
+Operator name
+
+### Operator password
+
+Operator password
+
+### Root folder path
+
+Root path, if not filled, it defaults to the root directory.
+
+### Sign url expire
+
+The validity period of the signed download address is 4 hours by default.
+
+## Example of filling in details
+
+::: tip
+If you want to use the official test domain name, you must manually add http For example: http://xxx.test.upcdn.net
+If you want to use HTTPS, of course, you can also add your own domain name, for example: https://you.xxx.com
+permission is turned on by itself, and the read permission must be turned on!
+:::
+
+
+
+### The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/webdav.md b/pages/en/guide/drivers/webdav.md
new file mode 100644
index 000000000..ccfa381dd
--- /dev/null
+++ b/pages/en/guide/drivers/webdav.md
@@ -0,0 +1,85 @@
+---
+top: 899
+categories:
+ - guide
+ - drivers
+---
+
+# WebDav
+
+## Address
+
+WebDAV root address
+
+## Username
+
+username
+
+## Password
+
+password
+
+## Root folder path
+
+The path of fodler you want to mount, same as join in address
+
+## Tls insecure skip verify
+
+Whether to skip SSL certificate verification. If your WebDAV server uses a self-signed certificate, you may need to enable this option. Enabling it will reduce security, please use it with caution.
+
+## Support 302 redirect
+
+In general, WebDAV servers return the file content directly. Due to the need for authorization, only proxy downloads are possible. However, some servers redirect to the actual file address, such as OpenList `WebDav Policy`'s `302 Redirect`.
+
+The `Web Proxy` option in WebDAV storage settings is enabled by default. If disabled, OpenList will attempt to obtain the redirected address and return it to the user device for direct download.
+
+Prerequisites:
+
+1. The WebDAV server must support returning 302; if it returns 200, this feature cannot be used, and disabling Web Proxy will make it unusable.
+2. The returned 302 address must be publicly accessible and must not require authorization information; otherwise, the user device cannot download it.
+3. Disable the `Web Proxy` option in the storage settings.
+
+## OneDrive/SharePoint
+
+Select the vendor as sharepoint, and support the international version/21Vianet.
+
+For OneDrive/SharePoint, you can obtain the WebDAV root address through [this tool](https://tool.example.com/onedrive/webdav). If you want to mount the specified directory, you can join it later.
+
+The username is the OneDrive account email, and the password is the OneDrive account password.
+
+## Error message
+
+- **failed get objs: failed to list objs: PROPFIND/根目录:403**
+
+ Need to log in to [Entra ID](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView?Microsoft_AAD_IAM_legacyAADRedirect=true)
+
+ Find 'Manage Security Default' and click to disable it(❗ Note: Closing this option will disable the Authenticator verification for the domain)
+
+ 
+
+ Another situation is that the corresponding OneDrive account has not been used for a long time, which will also prompt this problem. Try to log in to the account again from the OneDrive web page. The system will prompt you to change the password. After updating the password, try again with the changed password.
+
+- **failed link: failed get link: redirect failed, status: 200**
+
+ This error indicates that the WebDAV server does not support 302 redirects. You need to enable the `Web Proxy` option in the storage settings to use proxy downloads.
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[local proxy]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[302]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/weiyun.md b/pages/en/guide/drivers/weiyun.md
new file mode 100644
index 000000000..b3db39498
--- /dev/null
+++ b/pages/en/guide/drivers/weiyun.md
@@ -0,0 +1,60 @@
+---
+top: 682
+categories:
+ - guide
+ - drivers
+---
+
+# Tencent weiyun
+
+
+
+Tencent Weiyun official website: **https://www.weiyun.com**
+
+::: tip Weiyun login validity period reminder
+
+- QQ: The login can only keep alive for 48 hours at present, and the cookie has to be replaced
+- WeChat: no such problem, use token
+ It is recommended to use WeChat to log in
+
+:::
+
+## Root folder file_id
+
+1. Display the root directory, **`leave blank`**, you don’t need to fill in, the program will automatically fill in
+2. If only a single folder ID is displayed, select the folder to be displayed, Copy the ID behind the top address bar
+
+ 
+
+## Cookie
+
+After logging in to Weiyun, **Open the developer debugging tool (F12)**, find the request that carries the cookie in any request, copy and fill in it.
+
+- The token obtained by WeChat login is longer than the cookie field of QQ login
+- QQ WeChat fills in the `Cookie` field value, and you can see it by just looking for a request
+
+ 
+
+## Other notes
+
+1. The copy function cannot be used
+2. **It is recommended not to share Weiyun with the outside world. After all, it is bound to your own QQ number. If you have a major loss to QQ or other things after being blocked/frozen, you will be responsible for the consequences**
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style c1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ c1
+ end
+ c1[local proxy]:::someclass==default===>a2[user equipment]
+ classDef someclass fill:#f96
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/wopan.md b/pages/en/guide/drivers/wopan.md
new file mode 100644
index 000000000..018be2240
--- /dev/null
+++ b/pages/en/guide/drivers/wopan.md
@@ -0,0 +1,78 @@
+---
+top: 693
+categories:
+ - guide
+ - drivers
+---
+
+# WoPan
+
+
+
+[https://pan.wo.cn/](https://pan.wo.cn/)
+
+## GetToken
+
+::: tip
+The difference between the two token acquisition methods:
+
+- Method 1: **Token valid for seven days** Logging in to the web version of China Unicom Cloud Drive will disconnect and invalidate the mount point on OpenList's side. However, logging in to the mobile version is fine, and thereby you can have both open simultaneously.
+
+- Method 2: **Token valid for two months** There isn't any problem to log into the Unicom Cloud Drive. However, it will be kicked off if you log in on the mobile side.
+
+:::
+
+### Method 1
+
+1. Open developer tools
+2. Open the official website to log in
+3. Find the request with this content:
+ 
+4. Find the token in the response:
+ 
+
+### Method 2
+
+1. Open developer tools
+2. Open the official website to login
+3. Find the Apps tab in Developer Tools and select Session Storage:
+ 
+4. Follow the arrows in the diagram to find the `Refresh Token` and the `Access Token`
+
+## Root folder ID
+
+- **Personal cloud:**:**0**
+ - Single folder ID:Unknown (wait for replenishment)
+- **Family cloud**:Unknown (wait for replenishment)
+ - Family cloud Single folder ID:Unknown (wait for replenishment)
+
+## Type
+
+Personal cloud:Put the `family ID` blank is the personal cloud
+Family cloud:add `Family ID` Log in to the [SmartHome] -> [我的] -> [您的家], click"+" [Invite] -> [微信邀请], send the link to yourself, open it and copy all the text after 'groupId='.
+
+## OpenList fill in examples:
+
+Data obtained by using tools `Refresh_token Fill in the refresh token`, `Access_token fills in access_token`
+
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/drivers/wps.md b/pages/en/guide/drivers/wps.md
new file mode 100644
index 000000000..4118a2617
--- /dev/null
+++ b/pages/en/guide/drivers/wps.md
@@ -0,0 +1,48 @@
+---
+top: 675
+categories:
+ - guide
+ - drivers
+---
+
+# WPS
+
+
+
+OpenList supports mounting WPS cloud document (which is also called KDocs) web.
+
+Official websites:
+
+- KDocs (Personal):
+- WPS 365 (Business/Enterprise/Education):
+
+## Cookie
+
+::: warning
+Please make sure to obtain the Cookie using a new browser environment or incognito mode to avoid including session information from other accounts.
+
+A session can only be logged in to one account at a time.
+:::
+
+The cookie of WPS cloud storage can be obtained by following the steps below:
+
+1. Create a new browser environment or open an incognito window.
+2. Visit the corresponding WPS cloud document website and log in to your WPS account.
+3. Open the developer tools (press F12 or right-click and select "Inspect").
+4. Go to the "Network" tab and refresh the page.
+5. Search for `islogin` in the network requests and open one of them.
+6. In the request details, find the "Headers" section and look for the `Cookie` and `User-Agent` fields.
+7. Copy the entire value of relevant fields and use them in OpenList.
+
+## Mode
+
+There are two modes of API:
+
+- Personal
+- Business
+
+Please select the appropriate mode based on your account type when adding the WPS cloud storage in OpenList.
+
+## Custom UA
+
+You can set a custom User-Agent for requests to WPS cloud document.
diff --git a/pages/en/guide/drivers/yandex.md b/pages/en/guide/drivers/yandex.md
new file mode 100644
index 000000000..20b2841d9
--- /dev/null
+++ b/pages/en/guide/drivers/yandex.md
@@ -0,0 +1,37 @@
+---
+top: 589
+categories:
+ - guide
+ - drivers
+---
+
+# Yandex Disk
+
+## Refresh token
+
+[Click here](https://oauth.yandex.com/authorize?response_type=code&client_id=a78d5a69054042fa936f6c77f9a0ae8b) to get the refresh token.
+
+## Root folder path
+
+The root foler to mount, defaults to `/`
+
+## The default download method used
+
+```mermaid
+---
+title: Which download method is used by default?
+---
+flowchart TB
+ style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
+ style a2 fill:#ff7575,stroke:#333,stroke-width:4px
+ subgraph ide1 [ ]
+ a1
+ end
+ a1[302]:::someclass====|default|a2[user equipment]
+ classDef someclass fill:#f96
+ c1[local proxy]-.alternative.->a2[user equipment]
+ b1[Download proxy URL]-.alternative.->a2[user equipment]
+ click a1 "../drivers/common.html#webdav-policy"
+ click b1 "../drivers/common.html#webdav-policy"
+ click c1 "../drivers/common.html#webdav-policy"
+```
diff --git a/pages/en/guide/index.md b/pages/en/guide/index.md
new file mode 100644
index 000000000..55aca17b4
--- /dev/null
+++ b/pages/en/guide/index.md
@@ -0,0 +1,56 @@
+---
+categories:
+ - guide
+top: 100000
+---
+
+# Quick Start
+
+OpenList is a file list program that supports multiple storage🗂️, a resilient, long-term governance, community-driven fork of AList🔀 — built to defend open source against trust-based attacks🛡️.
+
+You can follow the steps below to quickly get started with OpenList 🚀:
+
+::: info Still using Alist V3?
+Here's your complete migration guide from Alist V3 to OpenList:
+
+[🚀 Migration Guide](/en/guide/migrate)
+:::
+
+## Installation 🖥️
+
+- [One-click Script 🎯](/en/guide/installation/script)
+- [Manual installation ⚙️](/en/guide/installation/manual)
+- [Use Docker 🐋](/en/guide/installation/docker)
+- [Use 1Panel 📟](/en/guide/installation/1panel)
+- [Use TrueNAS Scale 🗄️](/en/guide/installation/truenas)
+- [Use Koyeb ☁️](/en/guide/installation/koyeb)
+- [Desktop 💻](/en/guide/installation/desktop)
+- [PaaS ☁️](/en/guide/installation/paas)
+- [Run from source 🏗️](/en/guide/installation/source)
+- [Download ⬇️](/en/guide/installation/download)
+- [Reverse proxy 🔄](/en/guide/installation/reverse-proxy)
+
+## Storage Setup 💾
+
+- [Common 🗂️](/en/guide/drivers/common)
+
+## Configuration ⚙️
+
+- [Configuration 📝](/en/configuration/configuration)
+- [Site Configuration 🌐](/en/configuration/site)
+- [Style Configuration 🎨](/en/configuration/style)
+- [Preview Configuration 👀](/en/configuration/preview)
+- [Global Configuration 🌍](/en/configuration/global)
+- [Other Configuration 🔧](/en/configuration/other)
+- [Side Configuration 📐](/en/configuration/side)
+
+## FAQ ❓
+
+- [OpenList Error-Code 🚨](/en/faq/error)
+- [How to 🛠️](/en/faq/howto)
+- [Why 🤔](/en/faq/why)
+- [See also 🔍](/en/faq/seealso)
+
+## Ecosystem 🏞️
+
+- [See more 🔍](/en/ecosystem/)
diff --git a/pages/en/guide/installation/1panel.md b/pages/en/guide/installation/1panel.md
new file mode 100644
index 000000000..fce1a686d
--- /dev/null
+++ b/pages/en/guide/installation/1panel.md
@@ -0,0 +1,78 @@
+---
+top: 45
+categories:
+ - guide
+ - installation
+---
+
+# Use 1Panel
+
+## Install
+
+### Install 1Panel
+
+First, install 1Panel on your server.
+
+Run the following **one-click installation script** as the **root user** to automatically download and install 1Panel:
+
+```bash
+bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
+```
+
+> 📖 **Detailed Installation Guide**: Please refer to the [1Panel Official Installation Documentation](https://1panel.cn/docs/v2/installation/online_installation/)
+
+After installation, log in to 1Panel using the provided **access address** and **initial account credentials**.
+
+### Install OpenList
+
+Log in to 1Panel, go to the **App Store**, search for **openlist**, and click **Install**.
+
+
+
+> During installation, please configure the following parameters according to actual needs:
+>
+> - **Version**: Select the latest stable version
+> - **WebUI Port**: Default is `5244`, can be modified as needed
+> - **S3 Port**: Default is `5246`, can be modified as needed
+> - **Pre-installed Environment**:
+> - `Thumbnail`: Pre-install ffmpeg
+> - `Offline Download`: Pre-install aria2
+> - `All of the above`: Pre-install ffmpeg & aria2
+> - **Timezone**: Recommended to set to `Asia/Shanghai`
+> - **Advanced Settings**: Be sure to check **External Port Access**
+
+> Keeping the **default configuration** can also complete the installation, but it is recommended to adjust according to actual needs.
+
+
+
+### Use OpenList
+
+After installation, go to the **Installed** page and click **Open** to access the OpenList **WebUI**.
+
+
+
+> It is recommended to set the **Default Access Address** in the panel settings before using the application.
+
+> If you later configure a **reverse proxy**, update the **Web Access Address** in `Installed → Parameters`.
+
+### Get Default Account & Password
+
+Go to the **Container List**, find the **OpenList container**, and click **Terminal**. Then run the following commands inside the container:
+
+- **Generate a random password**:
+
+ ```bash
+ ./openlist admin random
+ ```
+
+- **Manually set a password**:
+
+ ```bash
+ ./openlist admin set NEW_PASSWORD
+ ```
+
+> **Note**: Replace `NEW_PASSWORD` with your desired password.
+
+
+
+
diff --git a/pages/en/guide/installation/desktop.md b/pages/en/guide/installation/desktop.md
new file mode 100644
index 000000000..c289b3a61
--- /dev/null
+++ b/pages/en/guide/installation/desktop.md
@@ -0,0 +1,225 @@
+---
+top: 40
+categories:
+ - guide
+ - installation
+comment: false
+---
+
+# Desktop
+
+## What is OpenList Desktop
+
+OpenList Desktop is a cross-platform desktop application that provides a user-friendly interface for managing OpenList and performing local mounts via Rclone. Built with Vue 3, Tauri, and Rust, it serves as a comprehensive solution for:
+
+- Managing OpenList core
+- Mounting and managing cloud storage (WebDAV)
+- Monitoring service status and uptime
+- Providing system tray integration for background operations
+
+**Repository**: [OpenListTeam/OpenList-Desktop](https://github.com/OpenListTeam/OpenList-Desktop)
+
+## Features
+
+### Core Features
+
+- **OpenList Service Management**: Start, stop, and monitor OpenList core
+- **Local Mounting**: Mount via Rclone to the local file system
+- **Real-time Monitoring**: Track service status, uptime, and performance metrics
+- **Log Management**: View and manage OpenList and Rclone logs
+- **System Tray**: Background operation with system tray notifications
+
+### Management Features
+
+- **Service Control**: Start/stop/restart OpenList and Rclone services
+- **Configuration Management**: GUI-based configuration
+- **Log Monitoring**: Real-time log viewing and management
+- **Update Management**: Automatic update checking and installation
+- **Auto-startup**: Configure applications to start with system boot
+
+## Screenshots
+
+### Home Dashboard
+
+
+
+The main dashboard provides a comprehensive overview of your OpenList Desktop environment with:
+
+- OpenList backend status monitoring
+- Quick action buttons for common tasks
+- OpenList and Rclone version management
+- Service management controls
+
+### Mount Management
+
+
+
+Easily perform local mounts:
+
+- Add and configure storage remotes
+- Mount/unmount cloud storage
+- Monitor mount status and statistics
+- Configure auto-mounting options
+
+### Log Management
+
+
+
+Manage logs of multiple sources:
+
+- OpenList logs
+- Rclone logs
+- Application logs
+- Filter and search logs
+- Real-time log updates
+- Export logs to file and clipboard
+
+## Installation
+
+### System Requirements
+
+- **Operating System**: Windows 10+, macOS 10.15+, or Linux (Ubuntu 18.04+)
+
+### Download Options
+
+#### GitHub Releases (Recommended)
+
+Download the latest release from [GitHub Releases](https://github.com/OpenListTeam/OpenList-Desktop/releases):
+
+- **Windows**: `OpenList-Desktop_x.x.x_{arch}-setup.exe`
+- **macOS**: `OpenList-Desktop_x.x.x_{arch}.dmg`
+- **Linux**: `OpenList-Desktop_x.x.x_{arch}.deb` or `OpenList-Desktop_x.x.x_{arch}.rpm`
+
+#### Using Package Managers
+
+##### Windows - Winget
+
+```bash
+winget install OpenListTeam.OpenListDesktop
+```
+
+### Installation Steps
+
+#### Windows
+
+1. Download the `.exe` installer
+2. Run the installer as Administrator
+3. Follow the installation wizard
+4. Launch from Start Menu or Desktop shortcut
+
+#### macOS
+
+1. Download the `.dmg` file
+2. Open the DMG and drag OpenList Desktop to Applications
+3. Right-click and select "Open" (first time only)
+4. Grant necessary permissions when prompted
+
+#### Linux
+
+1. Download the `.deb` or `.rpm` package
+2. Use your package manager to install:
+
+```bash
+# For Debian/Ubuntu
+sudo dpkg -i OpenList-Desktop_x.x.x_amd64.deb
+
+# For CentOS/RHEL/Fedora
+sudo rpm -i OpenList-Desktop_x.x.x_amd64.rpm
+```
+
+## Getting Started
+
+### First Launch
+
+::: tip
+It is recommended to run OpenList Desktop with Administrator privileges on first launch to ensure proper service installation and configuration.
+:::
+
+1. **Initial Setup**: On first launch, the application will guide you through initial configuration
+2. **Service Installation**: Install the OpenList service when prompted
+3. **Storage Configuration**: Configure your first cloud storage connection
+
+### Basic Operations
+
+#### Starting Services
+
+1. Navigate to **Dashboard** tab
+2. Click **Start OpenList Core** in Quick Actions
+3. Click **Start Rclone Backend** if needed
+
+#### Adding Cloud Storage
+
+1. Navigate to **Mount** tab
+2. Click **Add Remote** button
+3. Configure storage settings:
+ - **Name**: Unique identifier for the storage
+ - **Type**: Storage provider (WebDAV)
+ - **URL**: Storage endpoint URL
+ - **Credentials**: Username and password
+ - **Mount Point**: Local directory path
+4. Click **Save** and **Mount**
+
+#### Monitoring Operations
+
+- **Service Status**: Check service health indicators on the dashboard
+- **Logs**: Use the Logs tab to monitor system operations
+- **Performance**: View uptime and response metrics on the dashboard
+
+### Advanced Features
+
+#### Auto-Mount Configuration
+
+Configure storages to automatically mount at startup with custom Rclone flags for optimal performance:
+
+- `--vfs-cache-mode=full`: Enable full VFS caching
+- `--buffer-size=256M`: Increase buffer size
+- `--transfers=10`: Concurrent transfer limit
+
+#### System Tray Operations
+
+- **Right-click tray icon** for quick actions
+- **Double-click** to show/hide main window
+- **Background operation** with notifications
+
+## Configuration
+
+### Application Settings
+
+Access comprehensive settings management including:
+
+- **OpenList Core Configuration**: Port, data directory, auto-launch settings
+- **Startup Preferences**: Auto-startup and automation options
+- **Theme and Language**: UI customization options
+- **Update Settings**: Automatic update preferences
+
+## Troubleshooting
+
+### Common Issues
+
+- **Service won't start**: Check if ports are available and run as Administrator
+- **Mount fails**: Verify storage credentials and network connectivity
+- **Performance issues**: Adjust Rclone cache settings and buffer sizes
+- **Update problems**: Check internet connection and proxy settings
+
+## Build from Source
+
+For developers who want to build from source:
+
+```bash
+# Clone the repository
+git clone https://github.com/OpenListTeam/OpenList-Desktop.git
+cd openlist-desktop
+
+# Install dependencies
+yarn install
+
+# Prepare development environment
+yarn run prebuild:dev
+
+# Development mode
+yarn tauri dev
+
+# Build the application
+yarn run build
+yarn run tauri build
+```
diff --git a/pages/en/guide/installation/docker.md b/pages/en/guide/installation/docker.md
new file mode 100644
index 000000000..865dec96f
--- /dev/null
+++ b/pages/en/guide/installation/docker.md
@@ -0,0 +1,567 @@
+---
+top: 50
+categories:
+ - guide
+ - installation
+---
+
+# Use Docker
+
+::: warning
+
+- In version `v4.1.0` and later (excluding `v4.1.0`), OpenList has removed the `PUID` and `PGID` environment variables in the image, and has adopted a method similar to that of MariaDB, where a user named `openlist` (UID 1001) and a group named `openlist` (GID 1001) are created, and `openlist server` runs under this user.
+
+ This means you need to manually handle the permission issues of the mapped directory, ensuring that the OpenList user (1001) inside the container has access to the mapped directory.
+
+ You can also run the container with the `--user UID:GID` option to specify the user and group under which OpenList runs inside the container, allowing it to access the mapped directory.
+
+- In the **rootless** mode of Docker, `--user 0:0` represents the current user's UID and GID. Please ensure that you set the `--user` parameter correctly when running the container to ensure proper file permissions.
+ :::
+
+## Install
+
+### Docker CLI
+
+Install Docker. And run the command below:
+
+#### For version after v4.1.0
+
+::: warning
+Please note: `/etc/openlist` is just the default mapped directory, you can change it to another directory as needed.
+:::
+
+::: tip
+If you are using the current user to run and manage OpenList and its configuration directory, please use the following command:
+:::
+
+```bash
+mkdir -p /etc/openlist
+docker run --user $(id -u):$(id -g) -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+::: tip
+If you want to run and manage OpenList and its configuration directory using the default OpenList user (1001) inside the container, please use the following command:
+:::
+
+```bash
+sudo chown -R 1001:1001 /etc/openlist
+docker run -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+#### For version v4.1.0 and earlier
+
+```bash
+docker run -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+### Docker Compose
+
+Create `docker-compose.yml` file.
+
+```bash
+mkdir -p /opt/openlist
+cd /opt/openlist
+vim docker-compose.yml
+```
+
+Write the content below. Then save and exit.
+
+#### For version after v4.1.0
+
+```yaml
+# docker-compose.yml
+services:
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ user: '0:0' # Please replace `0:0` with the actual user ID and group ID you want to use to run OpenList.
+ volumes:
+ - './data:/opt/openlist/data'
+ ports:
+ - '5244:5244'
+ environment:
+ - UMASK=022
+ restart: unless-stopped
+```
+
+#### For version v4.1.0 and earlier
+
+```yaml
+# docker-compose.yml
+services:
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ volumes:
+ - './data:/opt/openlist/data'
+ ports:
+ - '5244:5244'
+ environment:
+ - PUID=0
+ - PGID=0
+ - UMASK=022
+ restart: unless-stopped
+```
+
+Run commands in the same path of `docker-compose.yml` file:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+## Env
+
+| Name | Default | Desc |
+| :------------------------ | :------ | -------------------------------------------------------------------------------------------------------------------------- |
+| `PUID` | `0` | User UID, Deprecated in v4.1.0 later versions |
+| `PGID` | `0` | User GID, Deprecated in v4.1.0 later versions |
+| `UMASK` | `022` | https://en.wikipedia.org/wiki/Umask |
+| `TZ` | `UTC` | Default is the UTC time zone. If you want to specify a time zone, you can set this variable, for example: `Asia/Shanghai`. |
+| `RUN_ARIA2` | | Whether to run ARIA2 concurrently, default is `true` if aria2 is pre-installed, otherwise it is `false`. |
+| `OPENLIST_ADMIN_PASSWORD` | | Set the password of admin by environment variable |
+
+Additionally, OpenList supports passing [configuration](/en/configuration/configuration) through environment variables. The OpenList in the Docker image runs by default with the `--no-prefix` flag, so you don't need to add the `OPENLIST_` prefix.
+
+You can view all available environment variables online in Go Packages.
+
+https://pkg.go.dev/github.com/OpenListTeam/OpenList/v4/internal/conf#Config
+
+## Image Versions
+
+- Stable version: `openlistteam/openlist:latest` or `openlistteam/openlist:v*.*.*`
+ - Latest image version tag, please refer to https://hub.docker.com/r/openlistteam/openlist/tags
+
+ - Some PaaS platforms do not support images larger than 100MB. Please use the lightweight image `lite`, for example: `openlistteam/openlist:latest-lite`. Otherwise, you may encounter the following error: `Pod ephemeral local storage usage exceeds the total limit of containers 100Mi.`
+
+- Dev version: `openlistteam/openlist:beta`
+
+Pre-installed environment image suffix:
+
+| Suffix | Desc |
+| :------- | ----------------------------------------------------------------------- |
+| `aio` | An image that includes all of the following pre-installed environments. |
+| `ffmpeg` | Pre-installed FFmpeg image for generating thumbnail for local storage |
+| `aria2` | Pre-installed aria2 image for offline downloading. |
+
+You can append a suffix using the `-` symbol after any of the mirror tags to switch to an image with the corresponding environment. For example, `openlistteam/openlist:latest-aio` `openlistteam/openlist:latest-aria2` `openlistteam/openlist:latest-ffmpeg`.
+
+---
+
+If the thumbnail generation function still does not work when using the pre-installed ffmpeg, please confirm:
+
+- You are using local storage
+- Switched to grid view
+- The thumbnail switch in local storage driver settings is enabled
+- The configuration path for the thumbnail cache folder in local storage is correct, for example, `data/thumbnail`
+
+---
+
+When using a pre-installed aria2 mirror, you might see errors like the following in the OpenList logs:
+
+```
+ERRO[2022-11-20 12:05:19] error [unaligned 64-bit atomic operation] while run task [download http://xxx.com/xxx.png to [/ftp](/)]
+```
+
+The solution is, if the CPU architecture is 64-bit, you can try to manually pull a 64-bit image or rebuild the container. If the CPU architecture is 32-bit, there is currently no available solution.
+
+## See the admin's info
+
+### First run
+
+```bash
+docker logs openlist
+```
+
+You will see the admin password in the log.
+
+```
+Successfully created the admin user and the initial password is: xYZabHGf
+```
+
+### Not first run
+
+You can **randomly generate** or **manually set**
+
+```bash
+# Randomly generate password
+docker exec -it openlist ./openlist admin random
+
+# Manually set password to `NEW_PASSWORD` (replace this)
+docker exec -it openlist ./openlist admin set NEW_PASSWORD
+```
+
+## Update
+
+### Watchtower
+
+If you find it troublesome, you can complete the update with a single line using Watchtower.
+
+```bash
+docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower openlist --cleanup --run-once
+```
+
+If the container name is not named `openlist`, please replace it to the actual one.
+
+### Docker CLI
+
+```bash
+# View the container (find the ID of the OpenList container)
+docker ps -a
+
+# Stop running OpenList container instance, otherwise it cannot be deleted (this time the ID of the OpenList container is d429749a6e69, it is different for each installation)
+docker stop ID
+
+# Delete the OpenList container (the data is still there as long as you don't delete it manually)
+docker rm ID
+
+# Pull the latest image of OpenList
+docker pull openlistteam/openlist:latest
+```
+
+#### Upgrade to version v4.1.0 and later (excluding v4.1.0)
+
+::: tip
+If you want to run and manage OpenList and its configuration directory using the default OpenList user (1001) inside the container, please use the following command:
+:::
+
+```bash
+chown -R 1001:1001 /etc/openlist
+docker run -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+::: tip
+If you are using the current user to run and manage OpenList and its configuration directory, please use the following command:
+:::
+
+```bash
+sudo chown -R $(id -u):$(id -g) /etc/openlist
+docker run --user $(id -u):$(id -g) -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+#### Upgrade to version v4.1.0 and earlier (including v4.1.0)
+
+```bash
+docker run -d --restart=unless-stopped -v /etc/openlist:/opt/openlist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="openlist" openlistteam/openlist:latest
+```
+
+### Docker Compose
+
+Enter the same path of `docker-compose.yml` file and run:
+
+```bash
+docker compose pull
+docker compose down
+docker compose up -d
+```
+
+## Advanced Docker Compose
+
+Create `docker-compose.yml` file.
+
+```bash
+mkdir -p /opt/openlist
+vim docker-compose.yml
+```
+
+Write the content below. Then save and exit.
+
+#### For version after v4.1.0
+
+```yaml
+# docker-compose.yml
+services:
+ # OpenList | OpenList Core Service
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ volumes:
+ - '${OPLISTDX_DATA}/openlist:/opt/openlist/data'
+ - '${OPLISTDX_TEMP}/aria2:/opt/openlist/data/temp/aria2'
+ - '${OPLISTDX_TEMP}/qBittorrent:/opt/openlist/data/temp/qBittorrent'
+ - '${OPLISTDX_TEMP}/Transmission:/opt/openlist/data/temp/Transmission'
+ user: '${OPLISTDX_PUID}:${OPLISTDX_PGID}' # If you are using v4.1.0 later, must uncomment this line and set the correct user ID and group ID.
+ ports:
+ - '5244:5244'
+ environment:
+ # - PUID=${OPLISTDX_PUID} # Deprecated in v4.1.0 later versions
+ # - PGID=${OPLISTDX_PGID} # Deprecated in v4.1.0 later versions
+ - TZ=${OPLISTDX_TZ}
+ - UMASK=022
+ restart: unless-stopped
+
+ # # Aria2 下载器及webui | Aria2 Downloader & WebUI
+ # aria2-pro:
+ # image: p3terx/aria2-pro
+ # container_name: aria2-pro
+ # restart: unless-stopped
+ # ports:
+ # - '6800:6800'
+ # - '6888:6888'
+ # - '6888:6888/udp'
+ # volumes:
+ # - '${OPLISTDX_DATA}/aria2-pro:/config'
+ # - '${OPLISTDX_DOWNLOADS}/aria2:/downloads'
+ # - '${OPLISTDX_TEMP}/aria2:/opt/openlist/data/temp/aria2'
+ # environment:
+ # - 'PUID=${OPLISTDX_PUID}'
+ # - 'PGID=${OPLISTDX_PGID}'
+ # - 'TZ=${OPLISTDX_TZ}'
+ # - 'UMASK_SET=022'
+ # - 'RPC_SECRET=${OPLISTDX_ARIA2TOKEN}'
+ # - 'RPC_PORT=6800'
+ # - 'LISTEN_PORT=6888'
+ # ariang:
+ # container_name: ariang
+ # image: p3terx/ariang
+ # command: --port 6880
+ # ports:
+ # - 6880:6880
+ # restart: unless-stopped
+ # environment:
+ # - 'PUID=${OPLISTDX_PUID}'
+ # - 'PGID=${OPLISTDX_PGID}'
+ # - 'TZ=${OPLISTDX_TZ}'
+ # logging:
+ # driver: json-file
+ # options:
+ # max-size: 1m
+ # depends_on:
+ # - aria2-pro
+
+ # # qBittorrent 下载器 | qBittorrent Downloader
+ # qbittorrent:
+ # image: lscr.io/linuxserver/qbittorrent:latest
+ # container_name: qbittorrent
+ # environment:
+ # - PUID=${OPLISTDX_PUID}
+ # - PGID=${OPLISTDX_PGID}
+ # - TZ=${OPLISTDX_TZ}
+ # - WEBUI_PORT=8080
+ # - TORRENTING_PORT=6881
+ # volumes:
+ # - '${OPLISTDX_DATA}/qbittorrent:/config'
+ # - '${OPLISTDX_DOWNLOADS}/qbittorrent:/downloads'
+ # - '${OPLISTDX_TEMP}/qBittorrent:/opt/openlist/data/temp/qBittorrent'
+ # ports:
+ # - 8080:8080
+ # - 6881:6881
+ # - 6881:6881/udp
+ # restart: unless-stopped
+
+ # # Transmission 下载器 | Transmission Downloader
+ # transmission:
+ # image: lscr.io/linuxserver/transmission:latest
+ # container_name: transmission
+ # environment:
+ # - PUID=${OPLISTDX_PUID}
+ # - PGID=${OPLISTDX_PGID}
+ # - TZ=${OPLISTDX_TZ}
+ # - TRANSMISSION_WEB_HOME=${OPLISTDX_TRANSMISSION_WEB_HOME} #optional
+ # - USER=${OPLISTDX_TRANSMISSION_USER} #optional
+ # - PASS=${OPLISTDX_TRANSMISSION_PASS} #optional
+ # - WHITELIST=${OPLISTDX_TRANSMISSION_WHITELIST} #optional
+ # - PEERPORT=${OPLISTDX_TRANSMISSION_PEERPORT} #optional
+ # - HOST_WHITELIST=${OPLISTDX_TRANSMISSION_HOST_WHITELIST} #optional
+ # volumes:
+ # - '${OPLISTDX_DATA}/transmission:/config'
+ # - '${OPLISTDX_DOWNLOADS}/transmission:/downloads'
+ # - '${OPLISTDX_TRANSMISSIONWATCH}:/watch'
+ # - '${OPLISTDX_TEMP}/Transmission:/opt/openlist/data/temp/Transmission'
+ # ports:
+ # - 9091:9091
+ # - 51413:51413
+ # - 51413:51413/udp
+ # restart: unless-stopped
+```
+
+#### For version v4.1.0 and earlier
+
+```yaml
+# docker-compose.yml
+services:
+ # OpenList | OpenList Core Service
+ openlist:
+ image: 'openlistteam/openlist:latest'
+ container_name: openlist
+ volumes:
+ - '${OPLISTDX_DATA}/openlist:/opt/openlist/data'
+ - '${OPLISTDX_TEMP}/aria2:/opt/openlist/data/temp/aria2'
+ - '${OPLISTDX_TEMP}/qBittorrent:/opt/openlist/data/temp/qBittorrent'
+ - '${OPLISTDX_TEMP}/Transmission:/opt/openlist/data/temp/Transmission'
+ # user: "${OPLISTDX_PUID}:${OPLISTDX_PGID}" # If you are using v4.1.0 later, must uncomment this line and set the correct user ID and group ID.
+ ports:
+ - '5244:5244'
+ environment:
+ - PUID=${OPLISTDX_PUID} # Deprecated in v4.1.0 later versions
+ - PGID=${OPLISTDX_PGID} # Deprecated in v4.1.0 later versions
+ - TZ=${OPLISTDX_TZ}
+ - UMASK=022
+ restart: unless-stopped
+
+ # # Aria2 下载器及webui | Aria2 Downloader & WebUI
+ # aria2-pro:
+ # image: p3terx/aria2-pro
+ # container_name: aria2-pro
+ # restart: unless-stopped
+ # ports:
+ # - '6800:6800'
+ # - '6888:6888'
+ # - '6888:6888/udp'
+ # volumes:
+ # - '${OPLISTDX_DATA}/aria2-pro:/config'
+ # - '${OPLISTDX_DOWNLOADS}/aria2:/downloads'
+ # - '${OPLISTDX_TEMP}/aria2:/opt/openlist/data/temp/aria2'
+ # environment:
+ # - 'PUID=${OPLISTDX_PUID}'
+ # - 'PGID=${OPLISTDX_PGID}'
+ # - 'TZ=${OPLISTDX_TZ}'
+ # - 'UMASK_SET=022'
+ # - 'RPC_SECRET=${OPLISTDX_ARIA2TOKEN}'
+ # - 'RPC_PORT=6800'
+ # - 'LISTEN_PORT=6888'
+ # ariang:
+ # container_name: ariang
+ # image: p3terx/ariang
+ # command: --port 6880
+ # ports:
+ # - 6880:6880
+ # restart: unless-stopped
+ # environment:
+ # - 'PUID=${OPLISTDX_PUID}'
+ # - 'PGID=${OPLISTDX_PGID}'
+ # - 'TZ=${OPLISTDX_TZ}'
+ # logging:
+ # driver: json-file
+ # options:
+ # max-size: 1m
+ # depends_on:
+ # - aria2-pro
+
+ # # qBittorrent 下载器 | qBittorrent Downloader
+ # qbittorrent:
+ # image: lscr.io/linuxserver/qbittorrent:latest
+ # container_name: qbittorrent
+ # environment:
+ # - PUID=${OPLISTDX_PUID}
+ # - PGID=${OPLISTDX_PGID}
+ # - TZ=${OPLISTDX_TZ}
+ # - WEBUI_PORT=8080
+ # - TORRENTING_PORT=6881
+ # volumes:
+ # - '${OPLISTDX_DATA}/qbittorrent:/config'
+ # - '${OPLISTDX_DOWNLOADS}/qbittorrent:/downloads'
+ # - '${OPLISTDX_TEMP}/qBittorrent:/opt/openlist/data/temp/qBittorrent'
+ # ports:
+ # - 8080:8080
+ # - 6881:6881
+ # - 6881:6881/udp
+ # restart: unless-stopped
+
+ # # Transmission 下载器 | Transmission Downloader
+ # transmission:
+ # image: lscr.io/linuxserver/transmission:latest
+ # container_name: transmission
+ # environment:
+ # - PUID=${OPLISTDX_PUID}
+ # - PGID=${OPLISTDX_PGID}
+ # - TZ=${OPLISTDX_TZ}
+ # - TRANSMISSION_WEB_HOME=${OPLISTDX_TRANSMISSION_WEB_HOME} #optional
+ # - USER=${OPLISTDX_TRANSMISSION_USER} #optional
+ # - PASS=${OPLISTDX_TRANSMISSION_PASS} #optional
+ # - WHITELIST=${OPLISTDX_TRANSMISSION_WHITELIST} #optional
+ # - PEERPORT=${OPLISTDX_TRANSMISSION_PEERPORT} #optional
+ # - HOST_WHITELIST=${OPLISTDX_TRANSMISSION_HOST_WHITELIST} #optional
+ # volumes:
+ # - '${OPLISTDX_DATA}/transmission:/config'
+ # - '${OPLISTDX_DOWNLOADS}/transmission:/downloads'
+ # - '${OPLISTDX_TRANSMISSIONWATCH}:/watch'
+ # - '${OPLISTDX_TEMP}/Transmission:/opt/openlist/data/temp/Transmission'
+ # ports:
+ # - 9091:9091
+ # - 51413:51413
+ # - 51413:51413/udp
+ # restart: unless-stopped
+```
+
+Create `.env` file.
+
+```bash
+# =============================================================================
+# 基础配置 | Basic Configuration
+# =============================================================================
+# 用户和组 ID(确保文件权限正确)| User and group ID (ensure correct file permissions)
+OPLISTDX_PUID=0
+OPLISTDX_PGID=0
+
+# 时区设置 | Timezone setting
+OPLISTDX_TZ=Asia/Shanghai
+
+# =============================================================================
+# 路径配置 | Path Configuration
+# =============================================================================
+# 主数据目录 | Main data directory
+OPLISTDX_DATA=./data
+
+# 临时文件目录 | Temporary files directory
+OPLISTDX_TEMP=./temp
+
+# # 下载目录 | Downloads directory
+# OPLISTDX_DOWNLOADS=./downloads
+
+# # Transmission 监控目录 | Transmission watch directory
+# OPLISTDX_TRANSMISSIONWATCH=./watch
+
+# # =============================================================================
+# # Aria2 配置 | Aria2 Configuration
+# # =============================================================================
+# # Aria2 RPC 密钥 | Aria2 RPC secret token
+# OPLISTDX_ARIA2TOKEN=your_aria2_secret_token
+
+# # =============================================================================
+# # Transmission 配置(可选)| Transmission Configuration (Optional)
+# # =============================================================================
+# # Transmission Web UI 主题目录 | Transmission Web UI theme directory
+# OPLISTDX_TRANSMISSION_WEB_HOME=
+
+# # Transmission Web UI 用户名 | Transmission Web UI username
+# OPLISTDX_TRANSMISSION_USER=admin
+
+# # Transmission Web UI 密码 | Transmission Web UI password
+# OPLISTDX_TRANSMISSION_PASS=password
+
+# # IP 白名单(逗号分隔)| IP whitelist (comma separated)
+# OPLISTDX_TRANSMISSION_WHITELIST=
+
+# # Peer 端口 | Peer port
+# OPLISTDX_TRANSMISSION_PEERPORT=
+
+# # 主机白名单 | Host whitelist
+# OPLISTDX_TRANSMISSION_HOST_WHITELIST=
+```
+
+Run commands in the same path of `docker-compose.yml` file:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
+### Env
+
+| Name | Default | Desc |
+| :------------------------------------- | :------------ | -------------------------------------------------------------------------------------------------------------------------- |
+| `OPLISTDX_PUID` | `0` | User UID |
+| `OPLISTDX_PGID` | `0` | User GID |
+| `OPLISTDX_TZ` | `UTC` | Default is the UTC time zone. If you want to specify a time zone, you can set this variable, for example: `Asia/Shanghai`. |
+| `OPLISTDX_DATA` | `./data` | Main data directory. |
+| `OPLISTDX_TEMP` | `./temp` | Temporary files directory |
+| `OPLISTDX_DOWNLOADS` | `./downloads` | Downloads directory |
+| `OPLISTDX_TRANSMISSIONWATCH` | `./watch` | Transmission watch directory |
+| `OPLISTDX_ARIA2TOKEN` | | Aria2 RPC secret token |
+| `OPLISTDX_TRANSMISSION_WEB_HOME` | | Transmission Web UI theme directory |
+| `OPLISTDX_TRANSMISSION_USER` | | Transmission Web UI username |
+| `OPLISTDX_TRANSMISSION_PASS` | | Transmission Web UI password |
+| `OPLISTDX_TRANSMISSION_WHITELIST` | | IP whitelist (comma separated) |
+| `OPLISTDX_TRANSMISSION_PEERPORT` | | Peer port |
+| `OPLISTDX_TRANSMISSION_HOST_WHITELIST` | | Host whitelist |
diff --git a/pages/en/guide/installation/download.md b/pages/en/guide/installation/download.md
new file mode 100644
index 000000000..37a754a02
--- /dev/null
+++ b/pages/en/guide/installation/download.md
@@ -0,0 +1,12 @@
+---
+categories:
+ - guide
+ - installation
+top: 100
+---
+
+# Download
+
+You can download the corresponding binary executable file for the deployment system from this page or [GitHub Release](https://github.com/OpenListTeam/OpenList/releases).
+
+
diff --git a/pages/en/guide/installation/index.md b/pages/en/guide/installation/index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/en/guide/installation/koyeb.md b/pages/en/guide/installation/koyeb.md
new file mode 100644
index 000000000..dbda42b4a
--- /dev/null
+++ b/pages/en/guide/installation/koyeb.md
@@ -0,0 +1,118 @@
+---
+top: 42
+categories:
+ - guide
+ - installation
+---
+
+# Koyeb
+
+::: tip
+The [Koyeb free plan](https://www.koyeb.com/pricing#features) includes:
+
+- 1 Web Service (500 MB RAM, regions: Germany 🇩🇪 or United States 🇺🇸)
+- ~~1 Postgres~~ (Koyeb's free database only provides 5 hours per month; this guide uses the [Supabase free plan](https://supabase.com/pricing) instead)
+
+:::
+
+## Deployment Overview
+
+- Create a database on Supabase to persist OpenList configuration data
+- Deploy the OpenList application on Koyeb
+
+## Prerequisites
+
+- A [Supabase account](https://supabase.com/dashboard) (click to sign up)
+- A [Koyeb account](https://app.koyeb.com/auth/signup) (click to sign up)
+
+### Create the Database
+
+Sign in to [Supabase](https://supabase.com/dashboard).
+
+1. Create a new project.
+2. In **New project**, set the **Database password** and save it. Select **Central EU (Frankfurt)** as the region.
+ > Choose a region close to your Koyeb server — **Frankfurt** or **Washington D.C** is recommended.
+3. Open the new project and click the **Connect** button to find the DB_HOST.
+ 
+
+## Create the Service
+
+1. Sign in to the [Koyeb console](https://app.koyeb.com/) and click **Create App**.
+2. Select **Docker** under Web service.
+3. Set **Image** to `openlistteam/openlist:latest` and click **Next**.
+4. Choose the **Free** instance under **CPU Eco 🌱** and click **Next**.
+
+### Configure Deployment
+
+1. Enable the **Override** toggle next to **Command**.
+2. Enter `./openlist server --config /tmp/config.json` in the input box.
+ ::: warning
+ You must specify the config file path; otherwise you will get the error: the current user does not have write and/or execute permissions on the `./data` directory (`/opt/openlist/data`).
+ :::
+
+
+
+### Set up Environment Variables and Files
+
+#### Add environment variables
+
+| Key | Value | Purpose |
+| ------------------------- | --------------------------------- | ------------------------------------------------------------------------------- |
+| `TZ` | `Asia/Shanghai` (or any timezone) | Set the container timezone |
+| `UMASK` | `022` | https://en.wikipedia.org/wiki/Umask |
+| `OPENLIST_ADMIN_PASSWORD` | Initial admin password | Strongly recommended; otherwise a random password is generated on every restart |
+
+
+
+#### Add configuration file
+
+Switch to the `Files` tab, click **Add file**, and set **Path** to `/tmp/config.json` (matching the path specified in the Command).
+
+Enter the following in **File content**:
+
+```json
+{
+ "force": false,
+ "jwt_secret": "random_generated",
+ "database": {
+ "type": "postgres",
+ "host": "replace_with_your_DB_HOST",
+ "port": 5432,
+ "user": "postgres",
+ "password": "replace_with_your_database_password",
+ "name": "postgres",
+ "db_file": "",
+ "table_prefix": "x_",
+ "ssl_mode": "require",
+ "dsn": ""
+ },
+ "scheme": {
+ "address": "0.0.0.0",
+ "http_port": 5244
+ },
+ "temp_dir": "/tmp/temp",
+ "bleve_dir": "/tmp/bleve",
+ "log": {
+ "enable": false
+ }
+}
+```
+
+
+
+### Configure Ports
+
+Change the **Port** to `5244`.
+
+## Deploy and Verify
+
+1. Review the summary and click **Save and deploy**.
+2. After a short wait you should see OpenList initialization messages in the LOG panel.
+3. Once deployment is complete, click the link provided by Koyeb to access OpenList.
+
+
+
+## Updates and Maintenance
+
+- **Updates**: Go to the Service detail page. If the image is set to `latest`, simply click **Redeploy** when a new version is available.
+- **Logs**: View real-time logs on the Service detail page, or click **Details** under Scaling.
diff --git a/pages/en/guide/installation/manual.md b/pages/en/guide/installation/manual.md
new file mode 100644
index 000000000..5c1081956
--- /dev/null
+++ b/pages/en/guide/installation/manual.md
@@ -0,0 +1,401 @@
+---
+top: 60
+categories:
+ - guide
+ - installation
+---
+
+# Manual installation
+
+## Get OpenList
+
+You can download the corresponding binary executable file for the deployment system from [Download](./download) page or [GitHub Release](https://github.com/OpenListTeam/OpenList/releases).
+
+[](https://github.com/OpenListTeam/OpenList/releases)
+
+## Install using package manager
+
+### Linux
+
+Debian/Ubuntu can be installed from OpenList's APT repository and PPA repository, and the service (daemon) will be automatically configured.
+
+#### APT Repository
+
+Recommended - Automatic GPG Setup
+
+```bash
+# One-line install with automatic GPG key setup
+curl -fsSL https://github.com/OpenListTeam/OpenList-APT/releases/latest/download/install-apt.sh | bash
+
+# Then install OpenList
+sudo apt install openlist -y
+```
+
+Manual APT Setup with GPG Verification (Modern systems - Ubuntu 22.04+/Debian 12+)
+
+```bash
+# Download and install GPG keyring
+curl -fsSL https://github.com/OpenListTeam/OpenList-APT/releases/latest/download/openlist-archive-keyring.gpg | \
+ sudo tee /usr/share/keyrings/openlist-archive-keyring.gpg > /dev/null
+
+# Add repository with GPG verification
+echo "Types: deb
+URIs: https://github.com/OpenListTeam/OpenList-APT/releases/latest/download/
+Suites: ./
+Signed-By: /usr/share/keyrings/openlist-archive-keyring.gpg" | \
+ sudo tee /etc/apt/sources.list.d/openlist.sources
+
+# Update and install
+sudo apt update && sudo apt install openlist -y
+```
+
+Manual APT Setup without GPG Verification (Not Recommended)
+
+```bash
+# Modern systems (Ubuntu 22.04+/Debian 12+)
+echo "Types: deb
+URIs: https://github.com/OpenListTeam/OpenList-APT/releases/latest/download/
+Suites: ./
+Trusted: yes" | sudo tee /etc/apt/sources.list.d/openlist.sources
+
+# Legacy systems (Ubuntu <22.04/Debian <12)
+echo "deb [trusted=yes] https://github.com/OpenListTeam/OpenList-APT/releases/latest/download/ ./" | \
+ sudo tee /etc/apt/sources.list.d/openlist.list
+
+# Update and install
+sudo apt update && sudo apt install openlist -y
+```
+
+#### PPA Repository
+
+Alternative - Launchpad
+
+```bash
+# Add PPA repository
+sudo add-apt-repository ppa:openlist/server
+sudo apt update
+
+# Install OpenList
+sudo apt install openlist -y
+```
+
+#### Flatpak
+
+OpenList can be installed as a Flatpak package on most Linux distributions. Flatpak provides a sandboxed environment and automatic updates.
+
+[](https://github.com/OpenListTeam/OpenList-FLATPAK/releases)
+
+One-line Installation (Recommended)
+
+```bash
+curl -fsSL https://github.com/OpenListTeam/OpenList-FLATPAK/releases/latest/download/install-flatpak.sh | bash
+```
+
+Manual Installation
+
+```bash
+# Install Flatpak (if not already installed)
+# On Ubuntu/Debian
+sudo apt install flatpak
+
+# On Fedora
+sudo dnf install flatpak
+
+# On Arch Linux
+sudo pacman -S flatpak
+
+# Add Flathub repository (required for dependencies)
+flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+
+# Download and install OpenList Flatpak package
+wget https://github.com/OpenListTeam/OpenList-FLATPAK/releases/latest/download/org.oplist.openlist-linux-x86_64.flatpak
+flatpak install --user --bundle org.oplist.openlist-linux-x86_64.flatpak -y
+
+# Start OpenList
+flatpak run org.oplist.openlist server
+```
+
+### Windows
+
+OpenList can be installed from package managers Scoop main and WinGet on Windows.
+
+#### Scoop
+
+[](https://repology.org/project/openlist/versions)
+
+```powershell
+scoop install openlist
+openlist server
+```
+
+#### WinGet
+
+```powershell
+winget install OpenListTeam.OpenList
+openlist server
+```
+
+### macOS
+
+OpenList is available via Homebrew on macOS.
+
+#### Homebrew
+
+[](https://repology.org/project/openlist/versions)
+
+```bash
+$ brew install openlist
+```
+
+### Android
+
+::: tip
+OpenList follows the AGPL 3.0 open-source license, assumes no responsibility for any downstream derivative projects, and reserves the right to pursue their compliance with the same license.
+:::
+
+There are four ways to choose based on your needs
+
+1. Using **https://github.com/OpenListTeam/OpenList-Mobile**
+2. Using **https://github.com/LeoHaoVIP/AListLiteAndroid**
+3. Using **https://github.com/jing332/AListFlutter** (no longer maintained)
+4. Use `termux` to run
+ - Reference: **https://anwen-anyi.github.io/index/14-android_install.html**
+ - Note: Remember to authorize the APP, set the background running and battery saving policy to unlimited, otherwise it may be killed in the background, causing it to be suddenly interrupted and unusable during background use.
+
+#### Termux
+
+[](https://repology.org/project/openlist/versions)
+
+```bash
+pkg update
+pkg install openlist
+openlist server
+```
+
+## Running
+
+```bash
+Usage:
+ openlist [command]
+
+Available Commands:
+ admin Show admin user's info and some operations about admin user's password
+ cancel2fa Delete 2FA of admin user
+ completion Generate the autocompletion script for the specified shell
+ crypt Encrypt or decrypt local file or dir
+ help Help about any command
+ kill Force kill openlist server process by daemon/pid file
+ lang Generate language json file
+ restart Restart openlist server by daemon/pid file
+ server Start the server at the specified address
+ start Silent start openlist server with `--force-bin-dir`
+ stop Same as the kill command
+ storage Manage storage
+ version Show current version of OpenList
+
+Flags:
+ --data string data folder (default "data")
+ --config string config file (default "data/config.json")
+ --debug start with debug mode
+ --dev start with dev mode
+ --force-bin-dir Force to use the directory where the binary file is located as data directory
+ -h, --help help for openlist
+ --log-std Force to log to std
+ --no-prefix disable env prefix
+
+Use "openlist [command] --help" for more information about a command.
+```
+
+::: tip
+If there is a prompt as follows:It is because [your GLIBC version is too low](../../faq/why#lib64-libc-so-6-version-glibc-2-28-not-found-required-by-openlist-or-accept-function-not-implemented), it is recommended to download the musl version.
+
+```txt
+lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./openlist)
+accept: function not implemented
+```
+
+When you see the output of `start server @ 0.0.0.0:5244` and no error is reported afterwards, it means that the operation is successful. The initial password will be output when running for the first time. The program listens to port 5244 by default. Now open `http://ip:5244` You can see the login page, please see [WebDav](../advanced/webdav) for webdav.
+
+**For Flatpak Users**
+
+If you installed OpenList via Flatpak, use the following commands instead:
+
+```bash
+# Start server
+flatpak run org.oplist.openlist server
+
+# Show admin info
+flatpak run org.oplist.openlist admin
+
+# Generate random admin password
+flatpak run org.oplist.openlist admin random
+
+# Set admin password
+flatpak run org.oplist.openlist admin set NEW_PASSWORD
+
+# Show version
+flatpak run org.oplist.openlist version
+```
+
+:::
+
+::: warning
+Versions above v3.25.0 change the password to an encrypted hash value, and the password cannot be calculated directly. If the password is forgotten, it can only be re-**`randomly generated`** or **`manually set`**.
+:::
+
+The `xxxx` refers to the names corresponding to different systems/architectures, generally Linux-x86/64 is openlist-linux-amd64.
+
+### Linux
+
+```bash
+tar -zxvf openlist-xxxx.tar.gz
+chmod +x openlist
+./openlist server
+./openlist admin
+./openlist admin random
+./openlist admin set NEW_PASSWORD
+```
+
+### macOS
+
+```bash
+tar -zxvf openlist-xxxx.tar.gz
+chmod +x openlist
+./openlist server
+./openlist admin
+./openlist admin random
+./openlist admin set NEW_PASSWORD
+```
+
+### Windows
+
+```powershell
+Expand-Archive .\openlist-xxxx.zip
+.\openlist.exe server
+.\openlist.exe admin
+.\openlist.exe admin random
+.\openlist.exe admin set NEW_PASSWORD
+```
+
+## Daemon
+
+### Linux
+
+`vim /usr/lib/systemd/system/openlist.service` add the following content, where `path_openlist` is the path where openlist is located:
+
+```ini
+[Unit]
+Description=openlist
+After=network.target
+[Service]
+Type=simple
+WorkingDirectory=path_openlist
+ExecStart=path_openlist/openlist server
+Restart=on-failure
+[Install]
+WantedBy=multi-user.target
+```
+
+Then `systemctl daemon-reload`, now you can use these commands to manage the program:
+
+- Start: `systemctl start openlist`
+- Shut down: `systemctl stop openlist`
+- Self-start: `systemctl enable openlist`
+- Cancel Self-start: `systemctl disable openlist`
+- Status: `systemctl status openlist`
+- Restart: `systemctl restart openlist`
+
+Can't configure daemon? [**Video Tutorial**](https://www.bilibili.com/video/BV1rF41197Qv?t=187.0)
+
+### macOS
+
+Edit `~/Library/LaunchAgents/org.openlist.plist` in any way and add the following content, modify `path_openlist` to be the path where OpenList is located, and `path/to/working/dir` to be the working path of OpenList:
+
+```xml
+
+
+
+
+ Label
+ org.openlist
+ KeepAlive
+
+ ProcessType
+ Background
+ RunAtLoad
+
+ WorkingDirectory
+ path/to/working/dir
+ ProgramArguments
+
+ path_openlist/openlist
+ server
+
+
+
+```
+
+Then, execute `launchctl load ~/Library/LaunchAgents/org.openlist.plist` to load the configuration, now you can use these commands to manage the program:
+
+- Start: `launchctl start ~/Library/LaunchAgents/org.openlist.plist`
+- Close: `launchctl stop ~/Library/LaunchAgents/org.openlist.plist`
+- Unload configuration: `launchctl unload ~/Library/LaunchAgents/org.openlist.plist`
+
+### Windows
+
+#### Method One
+
+1. Download the newest `nssm` from https://nssm.cc/download.
+2. Unzip the archive and go to the diretory of `nssm.exe`.
+3. Hold Shift and right click on the blank space, then release and press S or select "powershell here", you should now see a blue window named "Windows PowerShell".
+4. Type `.\nssm.exe install openlist`.
+5. Select the path of `openlist.exe` for "Path", e.g. `D:\openlist\openlist.exe`; type `server` for "Argument".
+6. You can custom "Display Name", "Description" and "Startup Type" in "Details" tab.
+7. Go to "I/O" tab and select a file for both "Output (stdout)" and "Output (stderr)", e.g. `D:\openlist\stdout.log`. The file itself (`stdout.log`) may not exist, but the folder (`D:\openlist`) must exist.
+8. Click on "Install Service".
+ You can now start the service from services.msc or task manager.
+
+#### Method Two
+
+Use **`.VBS`** script to start and stop, create two scripts respectively `start.vbs` and `stop.vbs`.
+Just double-click to start it in the folder at the same level as the OpenList startup program, don't worry about no response, just go to the browser to access it.
+
+::: info Two startup scripts
+**start.vbs**
+
+```bash title="vbscript"
+Dim ws
+Set ws = Wscript.CreateObject("Wscript.Shell")
+ws.run "openlist.exe server",vbhide
+Wscript.quit
+```
+
+**stop.vbs**
+
+```bash title="vbscript"
+Dim ws
+Set ws = Wscript.CreateObject("Wscript.Shell")
+ws.run "taskkill /f /im openlist.exe",0
+Wscript.quit
+```
+
+1. If the script will not be created, you can download it yourself: [**Script Download**](https://www.alipan.com/s/DHPMhRtKUzY/folder/63e0961eae317bd4d4d945cda69dbb00f9837fb7)
+2. If the script will not be used, you can watch the video: [**reference video**](https://www.bilibili.com/video/BV1wWYTzdE4B)
+ How to realize Windows startup automatically, you can refer to the script mentioned above to use the video (second).
+
+:::
+
+::: info
+For all platform, you can use follow command to silent start, stop and restart. (v3.4.0 and later)
+
+```bash
+openlist start
+openlist stop
+openlist restart
+```
+
+:::
+
+## How to update
+
+Download the new version of OpenList and replace the previous one.
diff --git a/pages/en/guide/installation/paas.md b/pages/en/guide/installation/paas.md
new file mode 100644
index 000000000..98b430173
--- /dev/null
+++ b/pages/en/guide/installation/paas.md
@@ -0,0 +1,73 @@
+---
+top: 30
+categories:
+ - guide
+ - installation
+---
+
+# PaaS
+
+::: tip
+The documentation may not be updated in a timely manner. Please make adjustments based on the key information and the current deployment interface of the platform.
+:::
+
+## ClawCloud
+
+### One-click deployment
+
+::: danger
+Due to the removal of `PUID`/`PGID` environment variable support for better container specifications in [OpenList v4.1.1](https://github.com/OpenListTeam/OpenList/releases/tag/v4.1.1), ClawCloud platform will not be able to function properly due to lack of permission to write data (including using images or app in App Store).
+
+As of October 20 2025, ClawCloud has not yet merged our Deployment Template. One-click deployment is temporarily unavailable. If you want to deploy on ClawCloud, please refer to [#1209 (comment)](https://github.com/OpenListTeam/OpenList/issues/1209#issuecomment-3243803024).
+:::
+
+Click the button below to [deploy to Claw Cloud](https://template.run.claw.cloud/?openapp=system-fastdeploy%3FtemplateName%3Dopenlist). It can also be found in App Launchpad.
+
+[](https://template.run.claw.cloud/?openapp=system-fastdeploy%3FtemplateName%3Dopenlist)
+
+### Manual deployment
+
+#### Key Information
+
+| Name | Value | Description |
+| :--------------- | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Application Name | openlist | Application name |
+| Image | openlistteam/openlist:latest-lite | Image, please make sure to use the one with **lite**, otherwise the error `Pod ephemeral local storage usage exceeds the total limit of containers 100Mi.` may occur |
+| Replicas | 1 | Number of replicas, set to 1 |
+| CPU | 0.2 | Number of CPU cores, set according to your own needs |
+| Memory | 256M | Memory size, set according to your own needs |
+| Container Port | 5244 | Mapped port, which is `5244` if you have not modified the startup command or configuration |
+| Public Access | Y | Enable external access |
+| Custom Domain | - | If you have your own domain name, set it according to the prompts; if not, keep the default. Please make sure to use **https** for the protocol |
+| Local Storage | - | Persistent volume |
+| -- Capacity | 1 | Capacity |
+| -- Mount Path | /opt/openlist/data | Configured mapped directory, which is `/opt/openlist/data` if you have not modified the startup command or configuration |
+
+#### Reference Diagram
+
+
+
+
diff --git a/pages/en/guide/installation/reverse-proxy.md b/pages/en/guide/installation/reverse-proxy.md
new file mode 100644
index 000000000..fc65cc71e
--- /dev/null
+++ b/pages/en/guide/installation/reverse-proxy.md
@@ -0,0 +1,137 @@
+---
+top: 10
+categories:
+ - guide
+ - installation
+---
+
+# Reverse proxy
+
+OpenList listens to port 5244 by default. If modified, please also update the port number in the configuration below.
+
+If you are using **reverse proxy**, please ensure that the correct `Host` header is passed, as OpenList will generate the URL based on this information.
+
+If the `Host` header is unavailable, you can use the higher-priority `X-Forwarded-Host` header (non-standard header). If the issue persists, configure the [site_url](../../configuration/configuration.md#site-url).
+
+If you want to use a **sub folder**, you should configure the [site_url](../../configuration/configuration.md#site-url). Refer to [reverse proxy with sub folder](../../faq/howto.md#how-to-reverse-proxy-with-sub-directory).
+
+:::warning
+If you need to proxy to a non-standard port, make sure to pass the `domain:port` information through the `Host` or `X-Forwarded-Host` header, otherwise the port will be lost in URLs!
+:::
+
+## nginx
+
+https://nginx.org/en/docs/http/ngx_http_proxy_module.html
+
+Add in the `server` field of the website configuration file:
+
+```nginx
+location / {
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header Range $http_range;
+ proxy_set_header If-Range $http_if_range;
+ proxy_redirect off;
+ proxy_pass http://127.0.0.1:5244;
+ proxy_http_version 1.1;
+ # the max size of file to upload
+ client_max_body_size 20000m;
+}
+```
+
+::: warning
+If you use the aaPanel, be sure to delete the following default configuration:
+
+```nginx
+location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md
+location ~ .\*\.(gif|jpg|jpeg|png|bmp|swf)$
+location ~ .\*\.(js|css)?$
+```
+
+Disable Nginx caching in `/www/server/nginx/conf/proxy.conf` or the corresponding website configuration file. Otherwise, with the default configuration, when accessing large files, Nginx will attempt to cache the remote file locally first, resulting in playback failures.
+
+```nginx
+proxy_cache cache_one; # Remove this line
+proxy_max_temp_file_size 0; # Add this line
+```
+
+:::
+
+::: tip Nginx Host Variables Differences
+
+| Variable | Description | Includes Port | Notes |
+| -------------------- | ------------------------------------------------ | ------------- | ---------------------------------------------------------------------------------------------------- |
+| `$http_host` | The original `Host` request header | Yes | If the `Host` request header is missing, the value will be empty; not recommended for best practices |
+| `$host` | Server name from the `Host` request header field | No | Defaults to the server's `server_name` if `Host` field is missing |
+| `$host:$server_port` | Server name + port | Yes | Use this combination when you need to use a non-default port (other than 80 or 443) |
+
+:::
+
+If HTTP/3 is needed, the corresponding `Host` line should be modified to:
+
+```nginx
+proxy_set_header Host $host:$server_port;
+```
+
+This modified configuration will be compatible with requests using HTTP/2 or lower versions.
+
+## Apache
+
+Add the anti-generation configuration item `ProxyPass` under the `VirtualHost` field, such as:
+
+```xml
+
+ ServerName myapp.example.com
+ ServerAdmin webmaster@example.com
+ DocumentRoot /www/myapp/public
+ AllowEncodedSlashes NoDecode
+ ProxyPreserveHost On
+ ProxyPass "/" "http://127.0.0.1:5244/" nocanon
+ ProxyPassReverse "/" "http://127.0.0.1:5244/" nocanon
+
+```
+
+## Caddy
+
+Add the reverse proxy configuration item `reverse_proxy` under the `Caddyfile` file, for example:
+
+```
+:80 {
+ reverse_proxy 127.0.0.1:5244
+}
+```
+
+If deployed on a server that is functioning properly on port 443 and accessed using a domain name, it is recommended to use this configuration to let Caddy automatically request a certificate:
+
+(Replace example.com with your own resolved domain name)
+
+```
+example.com {
+ reverse_proxy 127.0.0.1:5244
+}
+```
+
+## Tutorial: Setting up Reverse Proxy in aaPanel
+
+1. Login to the aaPanel and add a new website.
+
+::
+
+
+
+2. Modify the website settings.
+
+
+
+3. Remove the default panel code.
+
+
+
+
+4. Add the reverse proxy.
+
+
+
+> If you need to apply for an `SSL certificate`, you can first apply for the certificate in the `SSL` option, and then set up the reverse proxy. Alternatively, you can set up the reverse proxy first, disable the proxy function, apply for an `SSL` certificate, and then enable the proxy again.
diff --git a/pages/en/guide/installation/script.md b/pages/en/guide/installation/script.md
new file mode 100644
index 000000000..1ffce149b
--- /dev/null
+++ b/pages/en/guide/installation/script.md
@@ -0,0 +1,107 @@
+---
+top: 70
+categories:
+ - guide
+ - installation
+---
+
+# One-click Script
+
+Requirements:
+
+- Linux with systemd or OpenRC
+- Root privileges for installation
+- `curl`, `tar` installed
+- Architectures listed in the [download page](download)
+
+## Latest
+
+### Install
+
+::: code-group
+
+```bash [🌍Global]
+curl -fsSL https://res.oplist.org/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh
+```
+
+```bash [🇨🇳CN]
+curl -fsSL https://res.oplist.org.cn/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh
+```
+
+```bash [GitHub]
+curl -fsSL https://raw.githubusercontent.com/OpenListTeam/OpenList-Resource/refs/heads/main/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh
+```
+
+:::
+
+```bash
+欢迎使用 OpenList 管理脚本
+
+基础功能:
+1、安装 OpenList
+2、更新 OpenList
+3、卸载 OpenList
+-------------------
+服务管理:
+4、查看状态
+5、密码管理
+6、启动 OpenList
+7、停止 OpenList
+8、重启 OpenList
+-------------------
+配置管理:
+9、备份配置
+10、恢复配置
+-------------------
+高级选项:
+11、Docker 管理
+12、定时更新
+13、系统状态
+14、关于
+-------------------
+0、退出脚本
+```
+
+根据界面提示,输入`1`即可安装
+
+### openlist-manager
+
+::: tip
+**It can only be used after the installation is complete.**
+:::
+
+Use command: `openlist` or `openlist-manager`
+
+```bash
+欢迎使用 OpenList 管理脚本
+
+基础功能:
+1、安装 OpenList
+2、更新 OpenList
+3、卸载 OpenList
+-------------------
+服务管理:
+4、查看状态
+5、密码管理
+6、启动 OpenList
+7、停止 OpenList
+8、重启 OpenList
+-------------------
+配置管理:
+9、备份配置
+10、恢复配置
+-------------------
+高级选项:
+11、Docker 管理
+12、定时更新
+13、系统状态
+14、关于
+-------------------
+0、退出脚本
+```
+
+### FAQ
+
+1. Q: The architecture I am using is listed as supported on the download page, why does the installation script say it is not?
+
+ A: This is because the installation script is currently unable to recognise your CPU architecture. To help us add CPU architecture recognition to the installation script, please submit the output of the `arch` and `uname -m` commands to the issue page.
diff --git a/pages/en/guide/installation/source.md b/pages/en/guide/installation/source.md
new file mode 100644
index 000000000..6b3b68b71
--- /dev/null
+++ b/pages/en/guide/installation/source.md
@@ -0,0 +1,108 @@
+---
+top: 20
+categories:
+ - guide
+ - installation
+---
+
+# Run from source
+
+:::danger
+This step is only for users who need to modify the source code by themselves. If you don't understand, please skip it.
+:::
+
+## Environmental preparation
+
+First, you need to have an environment of `git`, `nodejs>=24`, `pnpm`, `golang>=1.24`, `gcc`
+
+On **Windows**, use Scoop:
+
+```powershell
+scoop install git nodejs-lts pnpm go mingw-winlibs
+```
+
+On **Linux/macOS**, use Homebrew:
+
+```bash
+# Debian / Ubuntu
+sudo apt install git curl build-essential
+
+# Fedora / RH
+sudo dnf install @development-tools
+# sudo yum groupinstall "Development Tools"
+
+# Arch
+sudo pacman -S git curl base-devel
+
+# macOS
+xcode-select --install
+
+# Install nodejs and golang use Homebrew for newer version
+curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash
+brew install node@24 go
+corepack enable pnpm
+```
+
+## Building the frontend
+
+```bash
+git clone https://github.com/OpenListTeam/OpenList-Frontend.git
+cd OpenList-Frontend
+pnpm install && pnpm build
+```
+
+## Build the backend
+
+Clone `https://github.com/OpenListTeam/OpenList` for this project, copy the `dist` directory of the previous step to the `public` directory under the project, and then:
+
+```bash
+appName="openlist"
+builtAt="$(date +'%F %T %z')"
+goVersion=$(go version | sed 's/go version //')
+gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
+gitCommit=$(git log --pretty=format:"%h" -1)
+version=$(git describe --long --tags --dirty --always)
+webVersion=$(curl -s --max-time 5 "https://api.github.com/repos/OpenListTeam/OpenList-Frontend/releases/latest" -L | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//')
+if [ -z "$webVersion" ]; then
+ webVersion="0.0.0"
+fi
+ldflags="\
+-w -s \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.BuiltAt=$builtAt' \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.GoVersion=$goVersion' \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.GitAuthor=$gitAuthor' \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.GitCommit=$gitCommit' \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.Version=$version' \
+-X 'github.com/OpenListTeam/OpenList/v4/internal/conf.WebVersion=$webVersion' \
+"
+go build -ldflags="$ldflags" .
+```
+
+::: details compilation tutorial videos you may need
+Windows version: **https://www.bilibili.com/video/BV1Xr4y1z723** (Although it is V2 version, it is the same as V3 version..)
+Linux version: **https://www.bilibili.com/video/BV1GW4y1s742**
+Compile documents: **https://www.yuque.com/anwenya/alist/glqlhu**
+:::
+
+## Building within Docker
+
+Install Docker, clone the repository, then navigate to the root directory of the repository. No further preparation is required.
+
+#### Basic
+
+```bash
+docker build -t openlistteam/openlist:beta .
+```
+
+#### build-arg
+
+```bash
+docker build -t openlistteam/openlist:beta-ffmpeg --build-arg INSTALL_FFMPEG=true .
+```
+
+Available build args:
+
+| | Desc |
+| :-------------------- | -------------- |
+| `INSTALL_FFMPEG=true` | Install ffmpeg |
+| `INSTALL_ARIA2=true` | Install aria2 |
diff --git a/pages/en/guide/installation/truenas.md b/pages/en/guide/installation/truenas.md
new file mode 100644
index 000000000..e4d3c636c
--- /dev/null
+++ b/pages/en/guide/installation/truenas.md
@@ -0,0 +1,88 @@
+---
+top: 44
+categories:
+ - guide
+ - installation
+---
+
+# Use TrueNAS Scale
+
+## Install the App
+
+Since OpenList is not officially available in the TrueNAS Apps catalog, you must use the **Custom App** feature to install it.
+
+Follow these steps to deploy OpenList via the **Install iX App** wizard:
+
+1. **Application Name**
+ Enter a name for your application (e.g., `openlist`). Keep the default version unless you require a specific tag.
+
+ 
+
+2. **Image Configuration**
+ - **Repository**: `openlistteam/openlist`
+ - **Tag**: `latest` (or specify another version if needed)
+ Leave all other fields at their defaults.
+
+ 
+
+3. **Container Configuration**
+ - **Environment Variables**:
+ Add a new variable:
+ - Name: `UMASK`
+ - Value: `022`
+ - **Restart Policy**: Select `Unless Stopped` to ensure automatic restart on failure.
+ - **Entrypoint**: Leave unchanged — it is pre-configured.
+ Other settings may be adjusted as desired.
+
+ 
+
+4. **Device**
+ No device passthrough is required for basic operation. Keep defaults.
+
+5. **Security Context Configuration**
+ - ✅ Check **Custom User**
+ - Set **UID** and **GID** to match a non-root user with permissions to access your storage volumes.
+ Default: `568/568` (apps/apps) — recommended for security.
+ - ⚠️ Avoid using `root` (UID/GID = 0) unless absolutely necessary — it poses a security risk.
+ > 💡 If you plan to use an **ixVolume** later, ensure this user has write permissions to the target dataset.
+
+ 
+
+6. **Network Configuration**
+ - Add a port mapping:
+ - **Host Port**: Any unused port (e.g., `10544`)
+ - **Container Port**: `5244`
+ - **Host IP**: `0.0.0.0` (accessible from any network) or restrict to a local IP if preferred.
+ Add additional mappings only if exposing other services.
+
+ 
+
+7. **Portal Configuration**
+ - **Port**: Match the Host Port from Step 6 (e.g., `10544`)
+ - **Name**: Optional — set to something descriptive like “OpenList Web UI”
+ Once saved, a **Web UI** button will appear on the Apps page.
+
+ 
+
+8. **Storage Configuration**
+ - ✅ **Mandatory**: At least one volume must be configured.
+ - Click **Add** → Select storage type (`ixVolume` recommended for persistence).
+ - **Mount Path**: `/opt/openlist/data`
+ - Ensure the container’s user (from Step 5) has **write permissions** to this location.
+ - Optionally add more volumes for logs, configs, etc.
+
+ > 📌 Tip: Use **ixVolume** instead of host paths when possible — it ensures better integration with TrueNAS backup and snapshot features.
+
+ 
+
+9. **Labels Configuration**
+ Skip — not required for basic operation.
+
+10. **Resources Configuration** _(Optional)_
+ Set CPU/memory limits if you wish to constrain resource usage (e.g., 1 core, 512MB RAM).
+
+ 
+
+11. **Final Step**
+ Click **Install** to deploy the OpenList container.
+ Wait for status to turn green → then click **Web UI** to access the interface.
diff --git a/pages/en/guide/installation/worker.md b/pages/en/guide/installation/worker.md
new file mode 100644
index 000000000..172341173
--- /dev/null
+++ b/pages/en/guide/installation/worker.md
@@ -0,0 +1,257 @@
+---
+top: 40
+categories:
+ - guide
+ - installation
+---
+
+# OpenList Worker
+
+## What is OpenList Worker
+
+[**OpenList Worker**](https://github.com/OpenListTeam/OpenList-Worker)(仓库 `OpenList-TSWorker`)是 OpenList 官方的 TypeScript + Serverless 移植版。后端由 Go 重写为运行于边缘平台上的 TypeScript 服务,前端复用官方 [OpenList-Frontend](https://github.com/OpenListTeam/OpenList-Frontend)(SolidJS),无需自备服务器即可一键部署。
+
+- **后端**:Hono.js(TypeScript)
+- **运行平台**:Cloudflare Workers / EdgeOne Functions / Alibaba Cloud ESA / Vercel / AWS Lambda
+- **数据库**:Cloudflare D1(SQLite)、MySQL / MariaDB / PostgreSQL / SQL Server、Cloudflare KV
+- **许可证**:AGPL-3.0
+
+## Supported Platforms
+
+| Platform | Persistence | One-click | Notes |
+| :--------------------------------- | :---------------- | :-------: | :------------------------------- |
+| Cloudflare Workers | D1 / KV / JSON | ✅ | Recommended, global edge network |
+| EdgeOne Makers(国际站 / 中国站) | EdgeOne Blob / KV | ✅ | Tencent Cloud edge platform |
+| Alibaba Cloud ESA | EdgeKV | ✅ | Alibaba edge function |
+| Vercel | In-memory(JSON) | — | No persistence by default |
+| AWS Lambda(Serverless Framework) | In-memory(JSON) | — | `serverless.yml` |
+
+## One-click Deploy
+
+Click the button below to deploy to the corresponding platform:
+
+| EdgeOne Makers · 国际站 | EdgeOne Makers · 中国站 | Cloudflare Workers · 全球站 |
+| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| [](https://edgeone.ai/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://console.cloud.tencent.com/edgeone/pages/new?project-name=openlist-tsworker&repository-url=https://github.com/OpenListTeam/OpenList-Worker&install-command=pnpm%20install%20--no-frozen-lockfile&build-command=pnpm%20run%20build&output-directory=dist&env=JWT_SECRET) | [](https://deploy.workers.cloudflare.com/?url=https://github.com/OpenListTeam/OpenList-Worker) |
+
+> If Cloudflare prompts `无法获取存储库内容`(cannot fetch repository content), fork this project first, then deploy by connecting to the GitHub repository.
+
+## Initialization
+
+::: tip
+After deployment, the first visit to the site automatically enters an **installation wizard**. Set the admin account and password in the browser to complete initialization — no pre-configured `ADMIN_PASS` is required.
+:::
+
+## Environment Variables
+
+| Variable | Required | Default | Description |
+| :----------------------------------------------------------------------- | :---------- | :--------- | :--------------------------------------------------------------------------------------------------------------- |
+| `JWT_SECRET` | Recommended | — | JWT signing key, also used for data encryption and cron task auth. Auto-generated and persisted to KV when unset |
+| `DB_FORMAT` | Optional | `map` | Storage format: `map` (whole JSON) / `key` (per-key) / `sql` (relational, Go-compatible) |
+| `DB_DRIVER` | Optional | `auto` | Database driver: `auto` / `blob` / `cfkv` / `kv` / `d1` / `do` / `mysql` |
+| `CF_ACCOUNT` | Optional | — | Cloudflare account ID (required for `cfkv` mode) |
+| `CF_KV_UUID` | Optional | — | Cloudflare KV namespace ID (required for `cfkv` mode) |
+| `CF_API_KEY` | Optional | — | Cloudflare API token (required for `cfkv` mode) |
+| `MYSQL_URL` | Optional | — | MySQL connection string (or use `MYSQL_*` fields below) |
+| `MYSQL_HOST` / `MYSQL_PORT` / `MYSQL_USER` / `MYSQL_PASS` / `MYSQL_NAME` | Optional | — | MySQL connection fields (`DB_DRIVER = mysql`) |
+| `ADMIN_PASS` | Optional | — | Skip the install wizard and auto-initialize admin with this password |
+| `ALLOW_URLS` | Optional | — | Comma-separated CORS allowlist |
+| `MAX_UPLOAD` | Optional | `26214400` | Max size (bytes) for a whole upload (`/put`, `/form`) |
+| `MAX_UPPART` | Optional | `16777216` | Max size (bytes) per chunk in multipart upload |
+| `ASSET_URLS` | Optional | — | Frontend asset CDN base URL, supports the `$version` placeholder |
+| `ALLOW_SEED` | Optional | — | Allowlist of hosts permitted as seed-data sources |
+
+## Data Backend(DB_FORMAT & DB_DRIVER)
+
+OpenList Worker separates persistence into two orthogonal layers:
+
+- **`DB_FORMAT`** — how data is serialized and stored
+- **`DB_DRIVER`** — which underlying storage system is used
+
+### `DB_FORMAT`(data storage format)
+
+| Value | Description |
+| :--------------- | :-------------------------------------------------------------------------- |
+| `map`(default) | Whole object serialized as a single JSON value, ideal for KV / Blob storage |
+| `key` | Per-key storage, one record per entity (avoids large JSON) |
+| `sql` | Relational tables, fully compatible with the Go backend (for D1 / MySQL) |
+
+### `DB_DRIVER`(database driver)
+
+| Value | Description | Suitable platform |
+| :---------------- | :---------------------------------------------------------------------------- | :------------------------ |
+| `auto`(default) | Auto-detect available driver(priority: blob → cfkv → kv → d1 → memory) | Universal, works anywhere |
+| `blob` | Tencent EdgeOne Blob / Alibaba ESA Blob | EdgeOne / ESA |
+| `cfkv` | Cloudflare KV REST API(requires `CF_ACCOUNT` / `CF_KV_UUID` / `CF_API_KEY`) | External / cross-account |
+| `kv` | Cloudflare KV binding | Cloudflare Workers |
+| `d1` | Cloudflare D1 (SQLite) | Cloudflare Workers |
+| `do` | Cloudflare Durable Objects (SQLite) | Cloudflare Workers |
+| `mysql` | External MySQL | Node.js container runtime |
+
+### Recommended combinations
+
+```bash
+# Cloudflare Workers + D1 (recommended, SQL format compatible with Go backend)
+DB_FORMAT=sql
+DB_DRIVER=d1
+```
+
+> **Backward compatibility:** the legacy `DB_DRIVER=json` auto-converts to `DB_FORMAT=map` + auto-detected driver.
+
+#### Table naming (SQL format)
+
+The `sql` format uses columnar tables with the same naming strategy as the Go backend's GORM: snake*case + pluralized table names, plus the fixed `x*` prefix.
+
+| Go struct | Table name |
+| :------------ | :---------------- |
+| `SettingItem` | `x_setting_items` |
+| `SharingDB` | `x_sharing_dbs` |
+| `Storage` | `x_storages` |
+| `User` | `x_users` |
+| `Meta` | `x_metas` |
+| _(TS only)_ | `x_plugins` |
+
+The prefix is fixed to `x_` (matching the Go backend default), so no extra configuration is needed to share the same physical database with the Go backend.
+
+## Deploy to Cloudflare Workers
+
+### Prerequisites
+
+- A [Cloudflare](https://dash.cloudflare.com/) account
+- Node.js 18+ and pnpm
+
+### Option 1: One-click deploy
+
+Click the **Deploy to Cloudflare Workers** button above. If it prompts that the repository cannot be fetched, fork the project first and deploy via the GitHub repository connection.
+
+### Option 2: Manual deploy with Wrangler
+
+```bash
+# 1. Clone and install dependencies
+git clone https://github.com/OpenListTeam/OpenList-Worker.git
+cd OpenList-Worker
+pnpm install
+
+# 2. Configure wrangler.jsonc (JWT_SECRET, KV / D1 bindings)
+
+# 3. Deploy to Cloudflare Workers
+pnpm run deploy:worker
+# or: pnpm run deploy (builds frontend + deploys backend)
+```
+
+### D1 database
+
+Use Cloudflare's _Automatic resource provisioning_: omit `database_id` in `wrangler.d1.jsonc`, and wrangler (>= 4.45.0) auto-creates a D1 database with the same name and writes back the ID on deploy:
+
+```jsonc
+{
+ "vars": { "DB_FORMAT": "sql", "DB_DRIVER": "d1" },
+ "d1_databases": [{ "binding": "DB", "database_name": "openlist-data-base" }],
+}
+```
+
+After deployment, configure the KV namespace binding and environment variables in the [Worker dashboard](https://dash.cloudflare.com/).
+
+## Deploy to EdgeOne
+
+### One-click deploy
+
+Click the **EdgeOne** deploy button above, choose the international or China site:
+
+- [International console](https://console.edgeone.ai/makers)
+- [China console](https://console.cloud.tencent.com/edgeone/makers)
+
+### Persistence
+
+EdgeOne Makers uses `@edgeone/pages-blob` for persistence. The default `auto` driver auto-detects Blob. You can also explicitly set `DB_DRIVER = "blob"` (with `DB_FORMAT = "map"`) or `DB_DRIVER = "kv"` (with `DB_FORMAT = "key"`).
+
+### Scheduled tasks
+
+EdgeOne supports scheduled refresh via `edgeone.json`. Set `cron_secret` in the payload to your `JWT_SECRET` value, and configure the schedule:
+
+```jsonc
+{
+ "schedules": [
+ {
+ "name": "token-refresh",
+ "cron": "0 2 * * *",
+ "path": "/api/task/refresh",
+ "method": "POST",
+ "payload": { "cron_secret": "" },
+ "timezone": "Asia/Shanghai",
+ },
+ ],
+}
+```
+
+## Deploy to Alibaba Cloud ESA
+
+OpenList Worker ships a dedicated ESA edge function entry (`esa-entry.ts`), which adapts Alibaba Cloud EdgeKV into the project's KV interface.
+
+### Build & deploy
+
+```bash
+# 1. Install dependencies
+pnpm install
+
+# 2. Build (produces dist/esa-entry.js)
+pnpm run build
+```
+
+`esa.jsonc` defines the edge function entry, install/build commands, and static assets directory:
+
+```jsonc
+{
+ "name": "openlist",
+ "entry": "./dist/esa-entry.js",
+ "installCommand": "pnpm install --no-frozen-lockfile",
+ "buildCommand": "pnpm run build",
+ "assets": { "directory": "./dist" },
+}
+```
+
+### KV namespace
+
+Configure the EdgeKV namespace via the `KV_NAMESPACE` environment variable (default `openlist`).
+
+::: tip
+ESA EdgeKV is eventually consistent. The entry implements a module-level TTL cache (60s) to avoid "saved settings revert after refresh" caused by cross-node sync delay.
+:::
+
+## Local Development
+
+```bash
+# 1. Install backend dependencies
+pnpm install
+
+# 2. Fetch frontend and run the backend (unified dev server)
+pnpm run dev:unified
+
+# Or run the worker directly (frontend built separately)
+pnpm run dev:worker
+```
+
+## Production Deploy
+
+```bash
+# One-click deploy (frontend build + backend deploy to Cloudflare Workers)
+pnpm run deploy
+```
+
+## Troubleshooting
+
+::: details Cloudflare prompts "cannot fetch repository content"
+Fork the project first, then deploy by connecting to the GitHub repository instead of the direct one-click URL.
+:::
+
+::: details Settings revert after save (ESA / EdgeOne)
+This is usually a KV/CDN cache consistency issue. The entry already forces `no-cache` on `/api/*` GET responses and implements a module-level KV cache. If it persists, check that your KV namespace is correctly bound and not read-only.
+:::
+
+::: details How do I reset the admin password?
+The admin password is set during the install wizard. To reset, you can set `ADMIN_PASS` temporarily and redeploy, or clear the persisted config and re-run the wizard.
+:::
+
+## Repository
+
+- [OpenListTeam/OpenList-Worker](https://github.com/OpenListTeam/OpenList-Worker)
diff --git a/pages/en/guide/migrate.md b/pages/en/guide/migrate.md
new file mode 100644
index 000000000..13f860ea6
--- /dev/null
+++ b/pages/en/guide/migrate.md
@@ -0,0 +1,113 @@
+---
+categories:
+ - guide
+top: 99999
+---
+
+# Migrate from AList V3
+
+::: danger
+Smooth migration is not compatible with Alist v3.46 and higher versions. If you want to migrate, please avoid upgrading to a higher version.
+:::
+
+## 1. Revoke Authorization for Alist API
+
+As the API service provided by the original author may have been taken over by a third party, there is a risk of information leakage or account bans. If you have concerns, it is recommended to revoke authorization or log in again to ensure your security.
+
+Since it's not possible to provide detailed steps for every platform, we invite helpful users to visit [https://github.com/OpenListTeam/OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) and share screenshots of the authorization revocation process.
+
+The following content is provided by helpful online users in [OpenListTeam/OpenList-Docs#5](https://github.com/OpenListTeam/OpenList-Docs/issues/5) and [OpenListTeam/OpenList-Docs#6](https://github.com/OpenListTeam/OpenList-Docs/issues/6). We thank them for their contributions!🙏✨💖
+
+::: info The following methods only apply to cloud drives mounted using officially supported Open API methods.
+:::
+
+::: tip Quick overview of how to revoke authorization for each cloud drive ♿️
+
+- **Baidu Netdisk App** - My - Settings - Account Management - Authorization Management - Alist - Revoke Authorization
+- **Aliyun Drive** - My - Upper right gear icon - Privacy Settings - Authorization Management - Alist - Revoke Authorization
+- **115 APP** - Life (scroll down) - Account & Security - Multi-device Login Management - Third-party Login
+- **China Unicom Cloud** - Check login account on webpage - Future recommendation: follow tutorial for packet capture login
+- **Baidu Photo** - Avatar - App Settings - Account Management - Authorization Management
+- **JianGuoYun** - Upper left three lines - Settings - Third-party App Management - Revoke Authorization
+- **OneDrive** - https://account.live.com/consent/Manage - Revoke Authorization
+
+:::
+
+### Aliyun Drive
+
+1. Log in to Aliyun Drive
+2. Visit the link: [https://www.alipan.com/o/oauth/auth-list](https://www.alipan.com/o/oauth/auth-list)
+ 
+3. Find Alist under “**Authorized Cloud Services**,” click to enter, then click "**Revoke Authorization**"
+ 
+4. Successfully revoked
+ 
+
+### Aliyun Drive APP
+
+
+
+### Baidu Netdisk
+
+1. Log in to Baidu Netdisk
+2. Visit the link: [https://passport.baidu.com/v6/appAuthority](https://passport.baidu.com/v6/appAuthority)
+ 
+3. Find Alist in Authorization Management, click to enter, then click "**Revoke Authorization**"
+ 
+4. Successfully revoked
+
+### Baidu Netdisk APP
+
+
+
+### OneDrive Business
+
+Link: https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade/quickStartType~/null/sourceType/Microsoft_AAD_IAM?Microsoft_AAD_IAM_legacyAADRedirect=true
+
+
+
+### OneDrive Personal
+
+Link: https://account.live.com/consent/Manage
+
+
+
+### Google Drive
+
+Link: https://console.cloud.google.com
+
+
+
+
+
+
+
+## 2. Backup Configuration Files
+
+Use the [Backup & Restore](/en/guide/advanced/backup) function to back up the configuration files to your local device.
+
+Additionally, you will need to back up the `data` folder from Alist V3, which contains site configuration files and the database.
+
+## 3. Uninstall Alist V3
+
+Uninstall according to the method you used for installation.
+
+## 4. Install OpenList
+
+Follow the instructions provided in the documentation to install OpenList.
+
+::: danger
+If you are using Docker for deployment, make sure to modify the Volume mapping by changing the configuration file path from `/opt/alist/data` to `/opt/openlist/data`. Otherwise, your configuration files will be lost after updating the version and rebuilding the container!
+
+In addition, it is recommended to delete the previous container and then recreate it to avoid failure to run due to environmental changes.
+:::
+
+## 5. Restore Configuration Files
+
+If your Alist V3 version is below v3.46, you can migrate directly—keeping the previous `data` folder and only replacing the OpenList binary files.
+
+Otherwise, use the [Backup & Restore](/en/guide/advanced/backup) function to restore the backed-up configuration files to OpenList.
+
+## 6. Reset Settings
+
+Once in OpenList’s admin panel, on each settings page, click the `Load Default Settings` button at the bottom, then click `Save`.
diff --git a/pages/en/index.md b/pages/en/index.md
new file mode 100644
index 000000000..52f5b8510
--- /dev/null
+++ b/pages/en/index.md
@@ -0,0 +1,28 @@
+---
+layout: home
+title: OpenList
+titleTemplate: OpenList Docs
+description: OpenList is a resilient, community-driven file list program that supports multiple cloud storage platforms. Built as a secure fork of AList with enhanced security and long-term governance.
+comment: false
+
+# rendered by .vitepress/theme/components/HomeHero.vue
+landing:
+ name: OpenList
+ tagline: |-
+ 🗂️ A file list program that supports multiple storage,
+ powered by Gin and SolidJS!
+ actions:
+ - theme: brand
+ text: Get Started
+ link: /en/guide/
+ - theme: alt
+ text: View GitHub
+ link: https://github.com/OpenListTeam/OpenList
+ links:
+ - text: Disclaimer
+ link: /en/terms#disclaimer
+ - text: Terms of Service
+ link: /en/terms
+ - text: Privacy Policy
+ link: /en/privacy
+---
diff --git a/pages/en/privacy.md b/pages/en/privacy.md
new file mode 100644
index 000000000..db229faa3
--- /dev/null
+++ b/pages/en/privacy.md
@@ -0,0 +1,21 @@
+---
+sidebar: false
+aside: false
+outline: false
+pageClass: statement-page
+comment: false
+contributors: false
+---
+
+# Privacy Policy
+
+We highly value your privacy. We **DO NOT collect any of your personal information**. However, please be aware that your IP address and other metadata might be collected by your ISP or intermediate network nodes beyond our control.
+
+## Privacy Policy
+
+- We DO NOT collect, store, process, or analyze any of your personal data.
+- We DO NOT use any tracking technologies (such as cookies, fingerprinting, web beacons, etc.) to gather your data.
+- We DO NOT share your information with any third parties.
+- Your actions within this service are NOT recorded by us.
+- HOWEVER, your IP address and visit time may be collected by your ISP or transit nodes as part of normal Internet infrastructure behavior, which is BEYOND our control.
+- If you have any privacy-related concerns, please feel free to contact us.
diff --git a/pages/en/seeds/background.md b/pages/en/seeds/background.md
new file mode 100644
index 000000000..e49bce51a
--- /dev/null
+++ b/pages/en/seeds/background.md
@@ -0,0 +1,45 @@
+---
+categories:
+ - seeds
+top: 990
+---
+
+# Background
+
+## Overview
+
+1. Users can generate a seed for one or more files — on local disk or on a drive — to share file information, or to re-upload after the files are lost.
+2. Users can share seeds to perform offline rapid upload, file sharing, backup, and space release across drives, users, and devices.
+3. Generic BT clients can download the files inside a seed through a server proxy over the drive; OSS-compatible clients can rapid-upload or download via the server proxy.
+
+## Glossary
+
+| Term | Meaning |
+| --------------- | ---------------------------------------------------------------------------------------------------- |
+| Transfer Seed | A portable file-metadata system built on three sidecar formats |
+| Sidecar | A companion file alongside the main file, e.g. `movie.mp4.torrent` |
+| Seed | An `openlist-sharing-seed` v1 document describing path, size, hashes, and sources for a set of files |
+| Hash Matrix | Specifies which hashes to compute per file (md5/sha1/sha256 × whole/pieces) |
+| Piece | A block produced by splitting a file at `piece_size`; each piece has its own hash |
+| Whole hash | A single hash computed over the entire file |
+| Piece hashes | An array of hashes, one per piece |
+| Rapid upload | Reusing known hashes so a drive completes instantly without re-sending content |
+| Relay / Transit | Save synchronously to an intermediate drive, then copy server-side to the final drive |
+| Channel | Where a seed is mounted on a drive (`driver` + `mount_path`) |
+
+## Format roles
+
+| Format | Suffix | Encoding | Completeness | Primary use |
+| --------------------- | ---------- | ----------- | --------------------------------------------------------- | -------------------------------------------- |
+| OpenList Sharing Seed | `.oss` | JSON | Highest, losslessly carries all fields | OpenList-internal share / edit / recalculate |
+| BitTorrent | `.torrent` | bencode | Medium, standard fields + `x-openlist` lossless extension | Generic BT clients / offline tools |
+| CAS | `.cas` | Base64 JSON | Low, only rapid-upload hashes | 189pc rapid upload |
+
+The three are projections of the same file metadata: `.oss` is the superset, while `.torrent` and `.cas` are its semantic projections (see [Design principles](/en/seeds/design)).
+
+## Typical scenarios
+
+1. **Cross-drive migration**: move files from Aliyundrive to 189pc. A seed carrying SHA1 + MD5 + piece hashes lets the destination hit the hash and rapid-upload without a full download-then-upload.
+2. **Sharing**: share a `.oss` or `.torrent` so a friend rapid-uploads or offline-downloads on their own drive without consuming the sharer's egress.
+3. **Backup and space release**: generate a seed, delete the original, and re-rapid-upload it later from the seed.
+4. **Integrity verification**: per-piece hashes verify whether a downloaded file is complete and locate damaged pieces.
diff --git a/pages/en/seeds/design.md b/pages/en/seeds/design.md
new file mode 100644
index 000000000..755a7bb1b
--- /dev/null
+++ b/pages/en/seeds/design.md
@@ -0,0 +1,287 @@
+---
+categories:
+ - seeds
+top: 980
+---
+
+# Design principles
+
+## Goals
+
+1. **Portable**: three convertible sidecar formats for sharing file information across drives, users, and devices.
+2. **Reuse hashes to avoid redundant downloads**: reuse drive-provided hashes or stream-hash files.
+3. **Third-party compatible**: `.torrent` follows BT v1, and the `.cas` single-file five fields are byte-compatible with the reference project.
+4. **Safe and bounded**: parsing is bounded by byte/file/depth/path-traversal limits, and seeds never serialize credentials.
+
+## Format relationships
+
+The three formats are different projections of the same file metadata. `.oss` is the most complete; `.torrent` and `.cas` are its semantic projections:
+
+- `.oss` ⊇ `.torrent`: `.oss` converts to `.torrent` when it has the required BT info (SHA-1 whole + pieces); `.torrent` always converts to `.oss`.
+- `.oss` ⊇ `.cas`: `.oss` converts to `.cas` when it has whole + piece MD5; `.cas` always converts to `.oss`.
+- Conversion diagnostics report exactly what is missing.
+
+```mermaid
+graph TD
+ OSS[.oss most complete] -->|has BT-required info| TORRENT[.torrent]
+ TORRENT -->|always convertible| OSS
+ OSS -->|has whole + piece MD5| CAS[.cas]
+ CAS -->|always convertible| OSS
+ TORRENT -.->|has x-cas extension| CAS
+ CAS -.->|missing SHA1 pieces, not directly convertible| TORRENT
+```
+
+## Seed design
+
+### `.oss` structure
+
+`.oss` is the most complete JSON container:
+
+| Field | Description |
+| --------------------------- | ----------------------------------------------------------------- |
+| `format` / `version` | fixed `openlist-sharing-seed` / `1` |
+| `name` | seed name (editable, auto-derived if empty) |
+| `comment` | overall comment |
+| `created_at` / `created_by` | creation time / creator |
+| `piece_size` | piece size (default 10 MiB) |
+| `trackers` | tracker list |
+| `channels` | channels (`driver` + optional `mount_path`), public metadata only |
+| `files` | file array |
+
+Each file (`files[]`) carries:
+
+| Field | Description |
+| ----------------------------------- | ----------------------------------------------- |
+| `path` / `size` / `modified` | path / size / mtime |
+| `comment` | per-file comment |
+| `hashes.md5` / `sha1` / `sha256` | whole-file hashes |
+| `hashes.pieces` | per-algorithm piece hashes |
+| `sources` | public direct (`/d/`) or share (`/sd/`) sources |
+| `cas_slice_md5` / `cas_create_time` | CAS aggregate slice MD5 / create time |
+| `missing_channels` | drives that failed rapid upload |
+
+### `.torrent` structure
+
+A standard BitTorrent v1 file whose info dict holds `piece length` and `pieces` (SHA-1), plus two extension keys:
+
+- `x-openlist`: the full OpenList seed (MD5/SHA256, comments, channels, shares, etc.).
+- `x-cas`: 189pc CAS info (`file_md5` / `slice_md5` / `slice_size`).
+
+### `.cas` structure
+
+A base64-encoded JSON, compatible with the reference five-field single-file payload and extended for multiple files:
+
+```json
+{
+ "name": "example",
+ "size": 12345,
+ "md5": "d41d8cd98f00b204e9800998ecf8427e",
+ "sliceMd5": "…",
+ "create_time": "1720000000",
+ "slice_md5s": ["…", "…"],
+ "slice_size": 10485760,
+ "files": [{ "name": "a.txt", "size": 100, "md5": "…", "sliceMd5": "…", "create_time": "…" }]
+}
+```
+
+- Single file uses the top-level five fields (byte-compatible with the reference project); multiple files use the `files` array.
+- `slice_md5s` / `slice_size` are optional extensions preserving the per-piece MD5 list for 189pc rapid upload.
+- Third-party CAS clients use standard JSON parsing and ignore extra fields, remaining backward compatible.
+
+## Field spec and safety bounds
+
+Every inbound seed (regardless of whether it comes from `.oss` / `.torrent` / `.cas` or arbitrary JSON) first passes through **normalization**, which enforces these hard limits at parse time:
+
+| Constraint | Value |
+| ------------------------- | ------------------------------------------------------------------ |
+| `piece_size` valid range | 16 KiB ~ 64 MiB (default 10 MiB) |
+| File count | 1 ~ 100,000 |
+| Max per-file path length | 4096 bytes |
+| Max path depth | 64 levels |
+| Piece hash count | must equal `ceil(size / piece_size)` (0 for empty files) |
+| Max bencode nesting depth | 32 |
+| Max bencode item count | 100,000 |
+| Path safety | reject `\0`, backslash `\`, leading `/`, empty segments, `.`, `..` |
+| Name safety | reject empty, `.`, `..`, or names containing `/` or `\` |
+| `sources` URL | must be absolute with a scheme |
+| `channels.mount_path` | reject `?`, `#`, `\0` |
+
+Seeds **never serialize credentials** (e.g. `cookie`, `access_token`); `channels` keeps only public metadata like `driver` and `mount_path`. Normalization also applies these fixes:
+
+- Hashes are lowercased; invalid hashes error (md5 32, sha1 40, sha256 64 hex chars).
+- Missing `name` falls back to the first segment of `files[0].path`.
+- Missing `format` / `version` default to `openlist-sharing-seed` / `1`.
+- Missing `created_at` / `created_by` default to now / `OpenList`.
+- Duplicate file paths error.
+
+## Hash matrix design
+
+The hash matrix is a 3×2 boolean selection specifying which hashes to compute per file:
+
+```json
+{
+ "md5": { "whole": true, "pieces": true },
+ "sha1": { "whole": true, "pieces": true },
+ "sha256": { "whole": true, "pieces": true }
+}
+```
+
+- **whole**: a single whole-file hash (`hashes.md5` / `sha1` / `sha256`).
+- **pieces**: per-piece hash arrays (`hashes.pieces.md5[]` / `sha1[]` / `sha256[]`).
+
+Normalization rules:
+
+1. **All-empty means all-on**: when all six flags are `false`, they are treated as all `true` ("compute as much as possible").
+2. **Format forcing**: selecting `.torrent` forces `sha1.whole = true` and `sha1.pieces = true`; selecting `.cas` forces `md5.whole = true` and `md5.pieces = true`. The UI disables these checkboxes with a "required by this format" hint.
+3. **Reuse drive hashes**: the generation wizard calls `capabilities` first and pre-selects the hashes the drive already exposes, avoiding redundant downloads.
+
+The matrix decides whether generation must download: piece hashes are generally not exposed by drive listings, so any `pieces` requirement forces a streaming download; a missing whole hash also forces a download.
+
+## Encoding and conversion details
+
+### bencode (the encoding underneath `.torrent`)
+
+`.torrent` uses bencode. Dictionary keys must be sorted by byte order. The encoder handles the four value types:
+
+- integer → `ie` (errors when out of safe-integer range)
+- byte string → `:`
+- list → `le`
+- dictionary → `de`
+
+The parser enforces depth ≤ 32, items ≤ 100,000, and rejects trailing data.
+
+### The `.torrent` info dictionary
+
+- Single file: `info` holds `name`, `piece length`, `pieces`, `length`, optional `md5sum`.
+- Multi-file: `info` holds `name`, `piece length`, `pieces`, `files` (each with `length`, `path`, optional `md5sum`).
+- `pieces` is the concatenation of all SHA-1 piece hashes in order (20 bytes each); parsing verifies the piece count equals `ceil(total_size / piece_size)`.
+- `info_hash` = SHA-1(bencode(info)), used for magnet links and BT identification.
+
+OpenList extension keys:
+
+- `x-openlist`: a lossless bencode-embedding of the full `.oss` seed (JSON values recursively mapped to bencode values), letting OpenList clients fully reconstruct the metadata.
+- `x-cas`: `{ cloud, file_md5, slice_md5, slice_md5s, slice_size }` for 189pc rapid upload; written only for a single file with MD5.
+- `announce` / `announce-list`: derived from `trackers` (first tracker becomes `announce`).
+- `creation date` / `comment` / `created by`: standard metadata.
+
+When `x-openlist` is present at parse time, its consistency with the info dict is validated (name, piece_size, file count, each file's path and size); any mismatch errors out to prevent forgery.
+
+### Multi-file `.torrent` boundary limit
+
+All files in a BT v1 torrent share one piece sequence, so when `files.length > 1`, every file except the last must have a size divisible by `piece_size`; otherwise a piece is split by a file boundary and cannot be legally divided. Conversion reports `a file boundary splits a piece`.
+
+### `.cas` `sliceMd5` rules
+
+- When the piece size equals 10 MiB (`DEFAULT_PIECE_SIZE`) and a per-piece MD5 list exists:
+ - one piece → `sliceMd5 = that piece MD5`.
+ - multiple pieces → `sliceMd5 = md5(per-piece MD5s uppercased and joined by newline)`.
+- When per-piece MD5 is absent:
+ - file ≤ 10 MiB → use the whole-file MD5 as `sliceMd5`.
+ - file > 10 MiB and no legacy `cas_slice_md5` → conversion errors (cannot derive safely).
+
+Encoding `.cas` emits base64-encoded JSON; decoding tries base64 first and falls back to plain JSON (for legacy files).
+
+### Format auto-detection
+
+The `parse` API detects the format by the first character: `{` → `.oss` (JSON), `d` → `.torrent` (bencode dict), otherwise → `.cas`. An explicit `format` hint can override this.
+
+## Architecture
+
+Seed capability is provided by two equivalent implementations, one per backend:
+
+| Backend | Language | Format library | API layer |
+| ----------------- | ---------- | ------------------------------------------------------------------------- | --------------------------- |
+| OpenList-Backends | Go | `pkg/torrent/` (bencode, hash writer, generate, parse, convert, diagnose) | `server/handles/torrent.go` |
+| OpenList-TSWorker | TypeScript | `internal/seed/` (`codec.ts`, `hash.ts`, `types.ts`) | `server/seed.ts` |
+
+Both share the same field spec and codec logic (bencode sorting, CAS `sliceMd5` derivation, hash-matrix normalization, consistency validation), so seeds produced by the Cloudflare Worker and Go versions interoperate.
+
+```mermaid
+graph LR
+ UI[HopeUI frontend] -->|POST /fs/seed/*| GO[Go backend]
+ UI -->|POST /fs/seed/*| TS[TS Worker backend]
+ GO --> FMT[pkg/torrent format library]
+ TS --> TSFMT[internal/seed codec]
+ GO --> DRV[drivers: 189pc / PutURL / offline]
+ TS --> TSDRV[drivers: rapid / session / stream]
+```
+
+Core components:
+
+- **`HashWriter` / `TorrentPieceHasher`**: streaming hashers that maintain whole-file hashes (md5/sha1/sha256) plus per-piece hashes in a single pass, avoiding a second read.
+- **Normalization layer**: `normalizeSeed` (and the Go equivalent) applies field defaults and safety validation.
+- **Conversion layer**: encode/decode between `.oss` ↔ `.torrent` ↔ `.cas`, with missing-information diagnostics.
+- **Capability preflight**: `capabilities` summarizes per file "hashes available / download needed / streamable", reused by the UI and generation logic.
+
+## Data model
+
+Both the Go and TS backends share one data model with identical field names, ensuring seeds from either backend interoperate. The core structures are:
+
+### `Seed`
+
+| Field | Type | Description |
+| ------------ | ------------------- | ----------------------------------- |
+| `format` | `string` | fixed `openlist-sharing-seed` |
+| `version` | `number` | fixed `1` |
+| `name` | `string` | seed name |
+| `comment` | `string` | overall comment |
+| `created_at` | `string` (ISO 8601) | creation time |
+| `created_by` | `string` | creator |
+| `piece_size` | `number` | piece size in bytes, default 10 MiB |
+| `trackers` | `string[]` | tracker list |
+| `channels` | `SeedChannel[]` | channels that saved successfully |
+| `files` | `SeedFile[]` | file array |
+
+### `SeedFile`
+
+| Field | Type | Description |
+| ------------------ | -------------- | -------------------------------- |
+| `path` | `string` | relative path |
+| `size` | `number` | size in bytes |
+| `modified` | `string` | mtime (ISO 8601) |
+| `comment` | `string` | per-file comment |
+| `hashes` | `SeedHashes` | hash collection |
+| `sources` | `SeedSource[]` | public direct / share sources |
+| `cas_slice_md5` | `string` | CAS aggregate slice MD5 (legacy) |
+| `cas_create_time` | `string` | CAS creation time (legacy) |
+| `missing_channels` | `string[]` | drives that failed rapid upload |
+
+### `SeedHashes`
+
+| Field | Type | Description |
+| -------- | -------- | ---------------------------------------------- |
+| `md5` | `string` | whole-file MD5 |
+| `sha1` | `string` | whole-file SHA-1 |
+| `sha256` | `string` | whole-file SHA-256 |
+| `pieces` | `object` | `{ md5[], sha1[], sha256[] }` per-piece arrays |
+
+### `SeedSource`
+
+| Field | Type | Description |
+| ------------ | -------- | --------------------------------------------------- |
+| `type` | `string` | `openlist-direct` or `openlist-share` |
+| `url` | `string` | absolute URL, restricted to the configured site URL |
+| `expires_at` | `string` | expiry time (optional) |
+| `share_id` | `string` | share ID (for `openlist-share`) |
+
+### `SeedChannel`
+
+| Field | Type | Description |
+| ------------ | -------- | --------------------- |
+| `driver` | `string` | driver name |
+| `mount_path` | `string` | mount path (optional) |
+
+### `CASPayload` (`.cas` payload)
+
+| Field | Type | Description |
+| ------------- | ----------- | -------------------------------------------------- |
+| `name` | `string` | file name |
+| `size` | `number` | file size |
+| `md5` | `string` | whole MD5 |
+| `sliceMd5` | `string` | aggregate slice MD5 |
+| `create_time` | `string` | creation time |
+| `slice_md5s` | `string[]` | per-piece MD5 (optional extension) |
+| `slice_size` | `number` | piece size (optional extension, default 10 MiB) |
+| `files` | `CASFile[]` | per-file array for multi-file (optional extension) |
+
+> Single file uses the top-level five fields (`name`/`size`/`md5`/`sliceMd5`/`create_time`), byte-compatible with the reference project; multiple files use the `files` array; `slice_md5s`/`slice_size` preserve per-piece MD5 for 189pc rapid upload.
diff --git a/pages/en/seeds/faq.md b/pages/en/seeds/faq.md
new file mode 100644
index 000000000..caf74d9c4
--- /dev/null
+++ b/pages/en/seeds/faq.md
@@ -0,0 +1,65 @@
+---
+categories:
+ - seeds
+top: 940
+---
+
+# FAQ
+
+## Notes
+
+- `.cas` per-piece MD5 and multi-file support rely on optional extension fields; the single-file five fields remain byte-compatible with the reference project.
+- Relayed transfer requires an intermediate storage with synchronous native reuse or PutURL.
+- Recalculation requires the source file to already exist on the server.
+- The generated `.torrent` is a valid BT file, but OpenList itself is not a BT peer.
+- All seed parsing is bounded by byte, file-count, depth, and path-traversal limits.
+
+## Common questions
+
+### Why is my generated `.cas` flagged as Legacy CAS?
+
+A legacy CAS only carries the five fields `name`, `size`, `md5`, aggregate `sliceMd5`, and creation time, with no per-piece MD5 list, so conversion is lossy. Newer generation writes `slice_md5s` / `slice_size` to preserve per-piece MD5, and the preview no longer shows the Legacy CAS warning when piece hashes are present.
+
+### Why can't a seed with only MD5 convert to `.torrent`?
+
+`.torrent` follows the BT v1 spec and requires SHA-1 whole + piece hashes. MD5 alone cannot produce a valid `pieces` field; conversion reports the missing SHA-1 pieces explicitly.
+
+### Why does multi-file `.torrent` conversion report "a file boundary splits a piece"?
+
+All files in a BT v1 torrent share one piece sequence. In multi-file mode, every file except the last must have a size divisible by `piece_size`; otherwise a piece is cut by a file boundary and cannot be legally divided. Adjust the piece size or use a single file so sizes align.
+
+### Why does rapid upload report `unavailable`?
+
+When the destination drive cannot reuse the hashes in the current seed, the operation reports `unavailable` instead of silently degrading to a normal upload. Make sure the seed contains the hashes the target drive requires (see the [rapid upload matrix](/en/seeds/rapid-upload)).
+
+### Why can't relayed transfer use asynchronous offline download?
+
+Asynchronous offline download cannot guarantee the intermediate storage has fully landed before the server-side copy to the final drive. Relaying therefore requires the intermediate storage to support synchronous native reuse or PutURL.
+
+### Can a generated `.torrent` be downloaded by a generic BT client?
+
+The generated `.torrent` is a valid BT v1 file and can be handed to an offline tool via magnet. However, OpenList itself is not a BT peer; whether generic BT clients can download depends on the tracker/webseed deployment.
+
+### Why does recalculation require the source file on the server?
+
+Recalculation re-reads an existing server-side file to recompute hashes; it never downloads from an external source. Upload or save the file to the server first if it is not already there.
+
+### How do I enable automatic sidecar generation on upload?
+
+The upload API is controlled by headers: set `X-Seed-Sidecars` (e.g. `oss,torrent,cas`) to specify formats directly, or combine `X-Generate-Seed: on` with the storage-level `seed_policy` and the global `seed_auto_generate_policy`. The global policy defaults to `off`, so nothing is generated by default.
+
+### Why can't asynchronous upload (`as_task=true`) generate sidecars?
+
+Sidecar generation must read the full upload stream and hash it in one pass. An async task cannot guarantee the complete stream is available in the same process and written synchronously, so the upload API returns 400 for the "sidecars + async upload" combination.
+
+### What does an all-empty hash matrix mean?
+
+When all six flags (md5/sha1/sha256 × whole/pieces) are `false`, the system treats it as "compute as much as possible", equivalent to selecting everything. To produce a minimal seed, explicitly select only the hashes you need.
+
+### What is `x-openlist` inside a `.torrent`?
+
+`x-openlist` is OpenList's lossless extension key that bencode-embeds the full `.oss` seed into a standard torrent. OpenList clients use it to fully reconstruct MD5/SHA256, comments, channels, and shares; parsing also validates its consistency with the info dictionary to prevent forgery.
+
+### Why are background seed-generation tasks lost on restart?
+
+Requests over 1 GiB are queued as background tasks, but those tasks are not persisted; an unfinished task is lost when the service restarts and must be re-triggered. Small files (≤ 1 GiB) are generated synchronously and are unaffected.
diff --git a/pages/en/seeds/generate.md b/pages/en/seeds/generate.md
new file mode 100644
index 000000000..20a9e7a0e
--- /dev/null
+++ b/pages/en/seeds/generate.md
@@ -0,0 +1,101 @@
+---
+categories:
+ - seeds
+top: 970
+---
+
+# Generating seeds
+
+## Generate on upload
+
+While uploading, you can enable `.oss` / `.torrent` / `.cas` sidecars (all off by default). The sidecars are produced alongside the streaming hash calculation without a second read.
+
+## Generate from the context menu
+
+Right-click one or more files and choose "Generate transfer seed" to open the wizard:
+
+1. **Seed name**: editable, auto-derived when empty (file name for single selection, common prefix or folder for multiple).
+2. **Formats**: enable `.oss` / `.torrent` / `.cas` (any combination).
+3. **Hash matrix**: choose MD5 / SHA-1 / SHA-256 whole and piece hashes, pre-selecting the hashes the drive already provides.
+4. **Piece size**: defaults to 10 MiB.
+5. **File list**: shows each file's size, drive-provided hashes, whether a download is needed, and the generation mode (direct/download); per-file comments and per-file share/direct toggles.
+6. **Trackers**: picked from the system-configured tracker list.
+
+## Seed naming
+
+The seed name is editable; when empty it is auto-derived in this priority:
+
+1. **Single file**: the file name with its extension removed.
+2. **Multiple files sharing a base name**: if all files share the same name after removing extensions (e.g. `a.mkv`, `a.srt`, `a.ass` in one folder), use that common name.
+3. **Otherwise**: the common parent directory name.
+4. **Fallback**: `OpenList Seed`.
+
+Naming is subject to the same safety checks (rejecting empty names, `.`, `..`, or names containing `/` or `\`).
+
+## Generation modes
+
+- **Direct**: the drive already provides all required hashes, no download needed.
+- **Download**: files are streamed and hashed on the fly, with estimated traffic shown.
+- If the drive cannot stream files, generation is blocked with a hint; requests over 1 GiB are queued as a background task.
+
+## Generate API
+
+Right-click generation calls `POST /fs/seed/generate` (compatible with the legacy `POST /fs/torrent/generate`). Request body:
+
+| Field | Type | Description |
+| --------------- | ---------------------- | ------------------------------------------------------- |
+| `paths` | `string[]` | source file/directory paths |
+| `formats` | `SeedFormat[]` | target formats: `oss` / `torrent` / `cas` |
+| `hash_matrix` | `SeedHashMatrix` | hash matrix (see [Design principles](/en/seeds/design)) |
+| `piece_size` | `number` | piece size in bytes, default 10 MiB |
+| `name` | `string` | seed name (optional, auto-derived) |
+| `comment` | `string` | overall comment (optional) |
+| `file_comments` | `Record` | per-file comments (optional) |
+| `trackers` | `string[]` | tracker list (optional) |
+| `share_files` | `string[]` | file paths to record share links (`/sd/`) |
+| `direct_files` | `string[]` | file paths to record public direct links (`/d/`) |
+| `output_path` | `string` | directory to save the generated sidecars |
+
+Returns `SeedGenerateResult`: on synchronous completion it carries the produced paths; a non-empty `task` or `async` field means the request was queued as a background task.
+
+## Upload sidecar mechanics
+
+The upload API (`POST /fs/put`) hashes **while streaming** and then writes the sidecars alongside the main file. Whether to generate is decided in this priority order:
+
+1. Header `X-Seed-Sidecars`: explicit formats (e.g. `oss,torrent,cas`); non-empty enables generation.
+2. Header `X-Generate-Seed`: `on` / `true` / `1` enables, `off` disables, `inherit` or empty falls through.
+3. Storage-level `seed_policy`: the target storage's `on` / `off` / `inherit`.
+4. Global setting `seed_auto_generate_policy`: defaults to `off`.
+
+Other sidecar headers:
+
+| Header | Purpose |
+| -------------------- | ------------------------------------------------------------ |
+| `X-Seed-Format` | Equivalent to `X-Seed-Sidecars`, specifies formats |
+| `X-Seed-Piece-Size` | Piece size in bytes; forced to 10 MiB when `cas` is included |
+| `X-Seed-Hash-Matrix` | JSON hash matrix controlling which hashes are written |
+
+Constraints and details:
+
+- Upload sidecars require **synchronous upload**; an async upload (`as_task=true`) returns 400 (sidecars need a complete streaming hash, which cannot be guaranteed in a background task).
+- Hashing reuses the upload stream via `io.TeeReader`, so one read both uploads and hashes — no second read.
+- After upload, the byte count read by the `HashWriter` is verified against the declared size; a mismatch errors out (keeping sidecar hashes consistent with the landed file).
+- Sidecars are written as `.` in the same directory (e.g. `movie.mp4.torrent`, `movie.mp4.cas`, `movie.mp4.oss`).
+- When no format is given, enabled formats are resolved from the global `seed_format_policies`.
+
+## Background tasks
+
+When the total size of a generation request exceeds 1 GiB, it is queued as a background task so the request thread is not blocked. On completion the sidecars are written to `output_path`, and progress/result can be checked in the task center.
+
+Requests over the 1 GiB threshold go background automatically; everything else returns the produced paths synchronously.
+
+## Previewing seeds
+
+Opening a `.oss` / `.torrent` / `.cas` file shows a unified preview with:
+
+- file list and sizes
+- per-file hashes (whole + pieces, copyable with a per-piece popup)
+- file comments, timestamps, multi-line overall comment
+- trackers, channels, and share/direct sources
+- conversion feasibility (✓/✗, hover or click for missing reasons)
+- available operations (rapid upload, offline download, transfer, convert, edit, recalculate, preview/remove a single file)
diff --git a/pages/en/seeds/index.md b/pages/en/seeds/index.md
new file mode 100644
index 000000000..e281156b0
--- /dev/null
+++ b/pages/en/seeds/index.md
@@ -0,0 +1,26 @@
+---
+categories:
+ - seeds
+top: 1000
+---
+
+# Transfer Seeds
+
+## What are Transfer Seeds
+
+Transfer Seeds are a portable file-metadata system built on three sidecar formats for sharing file information, offline rapid-upload, backup, and space release across drives, users, and devices.
+
+- **`.oss`** (`openlist-sharing-seed` v1): the most complete JSON format; every field is optional.
+- **`.torrent`**: a standard BitTorrent v1 file with OpenList extensions.
+- **`.cas`**: a content-addressable payload compatible with the reference project [OpenList-CAS](https://github.com/GitYuA/OpenList-CAS), used for 189pc rapid upload.
+
+The three formats convert between each other (when enough information is present) and support generation, preview, rapid upload, offline download, relayed save, editing, and recalculation.
+
+## Sections
+
+- [Background](/en/seeds/background) — why transfer seeds exist and current capability boundaries
+- [Design principles](/en/seeds/design) — design goals and the structure of the three formats
+- [Generating seeds](/en/seeds/generate) — generate on upload / from the context menu / preview
+- [Using seeds](/en/seeds/usage) — rapid upload, offline download, relay, convert, edit, recalculate
+- [Rapid upload matrix](/en/seeds/rapid-upload) — hashes each drive exposes and requires
+- [FAQ](/en/seeds/faq) — notes and common questions
diff --git a/pages/en/seeds/rapid-upload.md b/pages/en/seeds/rapid-upload.md
new file mode 100644
index 000000000..c34bbe56a
--- /dev/null
+++ b/pages/en/seeds/rapid-upload.md
@@ -0,0 +1,75 @@
+---
+categories:
+ - seeds
+top: 950
+---
+
+# Rapid upload matrix
+
+The seed system relies on drive-provided hashes to avoid redundant downloads. Different drives differ in the hashes they "provide in listing" and "require for rapid upload". The two dimensions are merged below into a single two-dimensional matrix: **rows = hashes provided by the source listing, columns = hashes required by the target for rapid upload**; each cell answers "can this source rapid-upload to this target".
+
+## Legend
+
+| Symbol | Meaning |
+| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ✅ | Direct rapid upload: the source listing already provides every hash the target needs, no content download |
+| 🔶 | Needs hashing: the source provides part of the required hashes but is missing piece hashes or another algorithm, so the file must be downloaded to compute the rest first |
+| ❌ | Cannot rapid upload: the source lacks the key hash the target requires |
+| ➖ | Not applicable: the target drive does not support rapid upload (normal upload only) |
+
+## Rapid upload matrix
+
+| Source provides \ Target needs | MD5 | MD5 + pieces | SHA1 | MD5 + SHA1 | SHA1 or MD5 | GCID | SHA256 | no rapid upload |
+| ------------------------------ | --- | ------------ | ---- | ---------- | ----------- | ---- | ------ | --------------- |
+| **MD5** | ✅ | 🔶 | ❌ | 🔶 | ✅ | ❌ | ❌ | ➖ |
+| **SHA1** | ❌ | ❌ | ✅ | 🔶 | ✅ | ❌ | ❌ | ➖ |
+| **MD5 + SHA1** | ✅ | 🔶 | ✅ | ✅ | ✅ | ❌ | ❌ | ➖ |
+| **MD5 + SHA1 + SHA256** | ✅ | 🔶 | ✅ | ✅ | ✅ | ❌ | ✅ | ➖ |
+| **GCID** (block SHA1) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ➖ |
+| **none** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ➖ |
+
+## Drive hash capability mapping
+
+The table maps each drive to the matrix's rows (listing provides) and columns (rapid upload needs), so any "source → target" pair can be located in the matrix.
+
+| Drive | Hashes provided (source / row) | Rapid upload requires (target / column) |
+| ------------------ | -------------------------------- | --------------------------------------- |
+| 189pc | MD5 | MD5 + piece MD5 (`slice_md5`) |
+| 189 (legacy) | MD5 | MD5 + piece MD5 |
+| 189tv | MD5 | MD5 |
+| Aliyundrive | SHA1 | SHA1 (`pre_hash` + `content_hash`) |
+| Aliyundrive Open | SHA1 | SHA1 (`pre_hash`) |
+| Baidu | none (returned MD5 is untrusted) | MD5 (`content-md5` + `slice-md5`) |
+| PikPak | GCID (block SHA1) | GCID |
+| 115 | SHA1 | SHA1 |
+| 115 Open | SHA1 | SHA1 |
+| Thunder | GCID | GCID |
+| Thunder X | GCID | GCID |
+| Thunder Browser | GCID | GCID |
+| Quark Open | SHA1 | MD5 + SHA1 |
+| Quark UC | none | MD5 + SHA1 |
+| febbox | GCID | GCID |
+| 139 (China Mobile) | none (`digest` not exposed) | SHA256 (rapid upload) |
+| 123 | MD5 (`etag`) | MD5 |
+| 123 Open | SHA1 / MD5 | SHA1 (`sha1_reuse`) or MD5 |
+| Google Drive | MD5 + SHA1 + SHA256 | no rapid upload (normal upload) |
+| OneDrive | none | no rapid upload (normal upload) |
+
+## How to read the matrix
+
+- **Aliyundrive → 115**: source provides SHA1, target needs SHA1 → matrix `SHA1 × SHA1` = ✅ direct rapid upload.
+- **123 → 189pc**: source provides MD5, target needs MD5 + pieces → matrix `MD5 × MD5+pieces` = 🔶 must download to compute piece MD5.
+- **PikPak → Aliyundrive**: source provides GCID, target needs SHA1 → matrix `GCID × SHA1` = ❌ cannot rapid upload.
+- **Any source → Google Drive / OneDrive**: target has no rapid upload → last column = ➖, normal upload only.
+
+## Relation to the hash matrix
+
+The hash matrix is preflighted against these capabilities: if the source drive already provides every hash the target needs, no download is required; otherwise files are streamed and hashed on the fly. Selecting `.torrent` forces SHA-1 whole + pieces; selecting `.cas` forces MD5 whole + pieces (fixed 10 MiB) for 189pc rapid upload.
+
+## Notes
+
+- **GCID** is a block SHA1 (40 hex chars), used by PikPak / Thunder family / febbox.
+- 189 and Baidu chunked uploads additionally need per-piece MD5 (`slice_md5`), so their column is `MD5 + pieces`; a source providing only MD5 is marked 🔶 (must download to compute pieces).
+- The Aliyundrive family uses `pre_hash` (SHA1 of the first 1024 bytes) to trigger rapid upload, then computes the full SHA1 on hit.
+- 139 rapid upload uses SHA256; 123 Open supports either SHA1 reuse (`sha1_reuse`) or MD5.
+- **Note**: the matrix reflects each drive's native rapid-upload capability. Currently only 189pc CAS rapid upload is wired into the seed "rapid save" flow; other drives' rapid upload takes effect in the normal upload path (`Put` / `PutRapid`).
diff --git a/pages/en/seeds/usage.md b/pages/en/seeds/usage.md
new file mode 100644
index 000000000..773aa5bdd
--- /dev/null
+++ b/pages/en/seeds/usage.md
@@ -0,0 +1,116 @@
+---
+categories:
+ - seeds
+top: 960
+---
+
+# Using seeds
+
+## Seed API overview
+
+Seed capability is exposed under `POST /fs/seed/*` (the legacy `/fs/torrent/*` routes remain compatible):
+
+| API | Purpose |
+| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `parse` | Parse a seed (auto-detects `.oss` / `.torrent` / `.cas`) |
+| `upload_parse` | Upload a seed file and parse it |
+| `generate` | Generate a seed (see [Generating seeds](/en/seeds/generate)) |
+| `convert` | Convert between formats |
+| `diagnose` | Diagnose missing information for conversion |
+| `capabilities` | Preflight: per-file hashes available / download needed / streamable; or probe a destination storage's save methods |
+| `rapid_upload` | Rapid-upload save |
+| `offline_download` | Offline download / relayed transfer |
+| `update` | Edit / recalculate / remove files |
+| `update_channels` | Update channels (write `channels` / `missing_channels` on success/failure) |
+| `quick_save` | Quick save (alias of `rapid_upload` / `offline_download`) |
+
+All seed payloads are base64-encoded in the request body. Common `SeedOperationRequest` fields:
+
+| Field | Description |
+| ---------------------- | ------------------------------------------------------------------------------- |
+| `seed_data` | base64 seed content (aliases `content` / `data` / `torrent_data` also accepted) |
+| `file_name` | original seed file name |
+| `path` / `target_path` | destination directory |
+| `selected_files` | indices into the seed's `files[]` |
+| `update_channel` | whether to update channels on success |
+| `remove_files` | file paths to remove |
+| `recalc_files` | files to recalculate (`path` + `source_path`) |
+| `hash_matrix` | hash matrix for recalculation |
+
+## Rapid upload
+
+Select files and choose a destination drive/path. The UI shows the destination drive's supported rapid-upload methods (e.g. 189pc CAS) and whether rapid upload is currently possible. Native rapid upload is preferred; if the drive cannot reuse hashes, the operation reports `unavailable` instead of silently degrading.
+
+Per-file save decision (`method` returned by `capabilities`):
+
+| Method | Meaning | Badge |
+| ------------------- | ------------------------------------------------------------------------------------------ | ------ |
+| `189pc_cas` | destination is 189pc and the seed has the MD5 + piece MD5 CAS needs, so rapid upload works | green |
+| `put_url` | the seed has a usable direct link, so PutURL pulls server-side | green |
+| `offline_download` | falls back to an offline download tool | blue |
+| `download_required` | hashes cannot be reused; the server streams and re-uploads | yellow |
+| `unavailable` | the destination drive supports no usable method | red |
+
+Only `189pc_cas` and `put_url` are true "rapid upload" (no content download).
+
+## Offline download
+
+When the seed contains usable direct/share sources, files can be downloaded into the destination drive (PutURL / offline tool / server streaming). Torrent seeds can be handed to an offline tool via magnet.
+
+- `.torrent`: converted to magnet as a whole (`announce` → `tr`, `name` → `dn`, `length` → `xl`) and handed to the offline tool.
+- Other seeds: downloaded per file from `sources` (`/d/` direct or `/sd/` share links).
+
+## Relayed transfer
+
+Save synchronously into an intermediate drive (native rapid upload or PutURL), then copy server-side to the final drive. Asynchronous offline downloads cannot be relayed.
+
+Set `transit_path` (the intermediate path) with `options: { mode: "transfer" }`; the system saves synchronously to the intermediate storage, then copies to the final `path`.
+
+## Update channel on success
+
+With "update channel on success" enabled, a successful save appends the current drive to the seed's `channels`, while a failure is recorded in `missing_channels`.
+
+- `channels`: an array of `{ driver, mount_path }` marking drives where the seed has landed successfully.
+- `missing_channels`: an array of drive names that failed rapid upload, avoiding repeat attempts.
+
+## Convert
+
+Convert between formats; missing information (e.g. no SHA-1 pieces) is reported before conversion.
+
+- The target format is given by `format` / `to_format` / `target_format`.
+- `diagnose` lists the hashes required but missing for each target format, driving the ✓/✗ UI and its reasons.
+- Feasibility mirrors generation: `.torrent` needs SHA-1 whole + pieces; `.cas` needs MD5 whole + pieces (or a whole-file MD5 for files ≤ 10 MiB).
+
+## Edit and recalculate
+
+- **Edit**: update overall comment, trackers, channels, per-file comments, and share sources; share validity is checked during editing (invalid shares report their IDs).
+- **Recalculate**: pick a source directory and recompute hashes (with a selectable hash matrix). The source path is the source directory plus the seed's relative path; recalculation only reads existing server-side files.
+- **Remove files**: drop specified files from the seed via `remove_files`.
+
+## File-operation sidecar follow
+
+When copying / moving / renaming / deleting a main file, enable "Follow transfer seed sidecars" to move the companion `.oss` / `.torrent` / `.cas` / `.cas.torrent` along, keeping the main file and sidecars consistent.
+
+| Operation | API | `follow_seed` behavior |
+| --------- | ----------------- | ---------------------------------------------- |
+| Copy | `POST /fs/copy` | synchronously copy sidecars to the destination |
+| Move | `POST /fs/move` | synchronously move sidecars to the destination |
+| Rename | `POST /fs/rename` | rename sidecars to `newName + original suffix` |
+| Remove | `POST /fs/remove` | synchronously delete sidecars |
+
+- Sidecar path rule: main path + `.oss` / `.torrent` / `.cas` / `.cas.torrent`.
+- Files only (directories are skipped); missing sidecars are silently ignored.
+
+## Settings
+
+| Setting | Description | Default |
+| ---------------------------- | ------------------------------------------- | -------------------------- |
+| `seed_site_url` | Public site URL for share/direct sources | empty |
+| `seed_default_matrix` | Default right-click hash matrix | md5/sha1/sha256 whole=true |
+| `seed_default_trackers` | Tracker list offered at generation | empty |
+| `seed_default_format` | Default seed format | oss |
+| `seed_format_policies` | Per-format auto-generation switches | all off |
+| `seed_auto_generate_policy` | Global auto-generation policy | off |
+| `seed_single_direct_preview` | Direct preview for single-file seeds | false |
+| `seed_cas_direct_access` | Rapid-upload and preview CAS on open | false |
+| per-storage `seed_policy` | Storage-level `inherit`/`on`/`off` override | inherit |
diff --git a/snippets/reverse-tip.md b/pages/en/snippets/reverse-tip.md
similarity index 54%
rename from snippets/reverse-tip.md
rename to pages/en/snippets/reverse-tip.md
index 3ca27c7a1..59b8d25a6 100644
--- a/snippets/reverse-tip.md
+++ b/pages/en/snippets/reverse-tip.md
@@ -1,12 +1,5 @@
-::: en
::: danger Please read the following notes carefully
This interface is a reverse-engineered interface based on legacy products. The project team will not actively maintain it. Please do not submit any issues regarding fixes or further reverse engineering requests for this driver.
:::
-::: zh-CN
-::: danger 请仔细阅读注意事项
-
-本接口是基于历史产物的逆向接口,项目组不会主动进行维护,请勿针对此驱动提出有关于任何修复或进行进一步逆向行为需求的issue。
-
-:::
diff --git a/snippets/tos-tip.md b/pages/en/snippets/tos-tip.md
similarity index 58%
rename from snippets/tos-tip.md
rename to pages/en/snippets/tos-tip.md
index 9575112a7..2d534cb2d 100644
--- a/snippets/tos-tip.md
+++ b/pages/en/snippets/tos-tip.md
@@ -1,12 +1,5 @@
-::: en
::: danger
Please use your account in a standardized manner. Do not use it for distribution services including but not limited to **`multi-person sharing`**, **`image hosting, software hosting`** and **`video external links to video websites for playback`**, as well as some other irregular uses not mentioned above. You will be responsible for the consequences of your account being blocked.
:::
-::: zh-CN
-::: danger
-
-请规范使用帐号,包含但不限于 **`多人共享使用`**、**`图床、软件床`** 和 **`视频外链到视频网站播放`** 等分发服务以及一些没有提到的不规范使用的方式导致帐号被封禁的,后果自负!
-
-:::
diff --git a/pages/en/terms.md b/pages/en/terms.md
new file mode 100644
index 000000000..d06434b7c
--- /dev/null
+++ b/pages/en/terms.md
@@ -0,0 +1,38 @@
+---
+sidebar: false
+aside: false
+outline: false
+pageClass: statement-page
+comment: false
+contributors: false
+---
+
+# Terms of Service
+
+## AGPL License Notice
+
+This software is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html). You are free to use, modify, and distribute the software, but must comply with AGPL-3.0 terms, including disclosing source code when distributing or offering as a service. See the link above for details.
+
+## Terms of Use
+
+- This service is for lawful use only. Users must not engage in any illegal activity through this service.
+- Users assume all risks and responsibilities resulting from the use of this service.
+- We reserve the right to modify, suspend, or terminate the service at any time without prior notice.
+- The service is provided "as is" without any express or implied warranties of availability, accuracy, or fitness for a particular purpose.
+- All downstream projects based on OpenList must strictly comply with the full terms of the AGPL 3.0 license, including proper attribution, maintaining open-source status, and adopting the same license.
+- The OpenListTeam reserves the right to require downstream projects to be distributed under the same license and to pursue any violations of the license terms.
+- If you have any questions, please contact us.
+
+## DISCLAIMER
+
+- THE OPENLIST PROJECT IS FREE AND OPEN-SOURCE SOFTWARE, FORKED FROM THE UPSTREAM ALIST PROJECT AND MAINTAINED BY THE OPENLISTTEAM.
+- THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+- THIS SOFTWARE IS LICENSED UNDER THE [GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html). YOU ARE FREE TO USE, MODIFY, AND DISTRIBUTE THE SOFTWARE, BUT MUST COMPLY WITH AGPL-3.0 TERMS, INCLUDING DISCLOSING SOURCE CODE WHEN DISTRIBUTING OR OFFERING AS A SERVICE. SEE THE LINK ABOVE FOR DETAILS.
+- PLEASE COMPLY WITH RELEVANT LAWS AND REGULATIONS WHEN USING THIS SOFTWARE, AND REFRAIN FROM ANY FORM OF ABUSE.
+- THIS SOFTWARE IS IMPLEMENTED BASED ON OFFICIAL SDKS OR APIS, WITHOUT MODIFYING, DAMAGING, OR INTERFERING WITH THEIR BEHAVIOR.
+- IT ONLY PERFORMS HTTP 302 REDIRECTS OR TRAFFIC FORWARDING, WITHOUT INTERCEPTING, STORING, OR TAMPERING WITH ANY USER DATA.
+- THIS PROJECT IS NOT AFFILIATED WITH ANY OFFICIAL PLATFORM OR SERVICE PROVIDER.
+- THE MAINTAINERS ARE NOT RESPONSIBLE FOR ANY DIRECT OR INDIRECT LOSSES RESULTING FROM THE USE OR INABILITY TO USE THIS SOFTWARE.
+- YOU ASSUME ALL RISKS ASSOCIATED WITH USING THIS SOFTWARE, INCLUDING BUT NOT LIMITED TO ACCOUNT BANS, DOWNLOAD SPEED LIMITS, ETC.
+- ANY FORKS, BRANCHES, OR DERIVATIVE PROJECTS BASED ON OPENLIST ARE INDEPENDENT PROJECTS WITH THEIR OWN CREATORS, MAINTAINERS, AND FEEDBACK CHANNELS. THE OPENLISTTEAM DOES NOT PROVIDE ANY SUPPORT FOR THEM.
+- ANY ACTIONS, CONTENT, AND CONSEQUENCES ARISING FROM SUCH FORKS, BRANCHES, OR DERIVATIVE PROJECTS ARE THE SOLE RESPONSIBILITY OF THEIR RESPECTIVE MAINTAINERS, AND THE OPENLISTTEAM IS NOT LIABLE FOR ANY SUCH ISSUES.
diff --git a/pages/faq/error.md b/pages/faq/error.md
index 68cb4b679..c0cca19cc 100644
--- a/pages/faq/error.md
+++ b/pages/faq/error.md
@@ -1,181 +1,79 @@
---
-# This is the title of the article
-title:
- en: OpenList Error-Code
- zh-CN: OpenList 错误码
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 1
-# A page can have multiple categories
categories:
- faq
-# A page can have multiple tags
---
-::: en
-This article will collect some error codes that may occur during the use of OpenList and provide corresponding solutions (including network issues, changes in cloud storage APIs, and other cases that may require manual intervention).
-:::
-::: zh-CN
+# OpenList 错误码
+
本文将收集在使用 OpenList 过程中出现的一些错误码,并提供相应的解决方案(包括网络问题、网盘 API 更改及其他可能需要人工干预的情况)。
-:::
---
-::: en
-**Q**:Ali cloud disk open appears **TooManyRequests** 、**Too Many Requests**
-
-**A**:[**Click me to view detailed description**](../guide/drivers/aliyundrive_open.md)
-:::
-::: zh-CN
**Q**:阿里云盘open出现 **TooManyRequests** 、**Too Many Requests**
**A**:[**点我查看详细说明**](../guide/drivers/aliyundrive_open.md)
-:::
---
-::: en
-**Q**:Ali cloud disk open appears **ExceedCapacityForbidden**
-
-**A**:[**Click me to view detailed description**](../guide/drivers/aliyundrive_open.md#4-other-instructions)
-:::
-::: zh-CN
**Q**:阿里云盘open出现 **ExceedCapacityForbidden**
**A**:[**点我查看详细说明**](../guide/drivers/aliyundrive_open.md#4-其他说明)
-:::
---
-::: en
-**Q**:Token is expired(**Appears when logging in to the OpenList account**)
-
-**A**:It means that your `OpenList` login is valid for `48` hours by default, you can modify the configuration file `config.json`
-
-- If you are prompted to log in successfully when you log in and then this prompt is displayed again, check whether you have used CDN acceleration to cache the OpenList.
-
-:::
-::: zh-CN
**Q**:Token is expired(**出现在登录OpenList账号时**)
**A**:是指你`OpenList`登录有效期到了默认是`48`小时,可以在修改`config.json`配置文件中
- 如果你登录的时候提示登录成功然后又显示这个提示,检查你是否使用了CDN加速等给OpenList进行了缓存导致的
-:::
-
---
-::: en
-**Q**:Failed init storage but storage is already created: failed init storage: failed to refresh token: The input parameter refresh_token is missing. Please refer to document.
-
-**A**:Generally, the refresh token (token) is wrong when adding `driver`, and it can be solved by replacing it with the correct one.
-:::
-::: zh-CN
**Q**:Failed init storage but storage is already created: failed init storage: failed to refresh token: The input parameter refresh_token is missing. Please refer to document.
**A**:一般是在添加`驱动`的时候刷新令牌(token)不对,更换正确的替换了即可解决。
-:::
---
-::: en
-**Q**:failed get objs: failed to list objs: ForbiddenDriveNotValid:not valid driveld
-
-**A**:Generally, it means that `driver` has been deprecated. For example, Aliyun disk can be replaced with [**Alibaba cloud disk open**](../guide/drivers/aliyundrive_open.md). Others are temporarily unknown.
-:::
-::: zh-CN
**Q**:failed get objs: failed to list objs: ForbiddenDriveNotValid:not valid driveld
**A**:一般指的是`驱动`已经弃用,例如阿里云盘,更换成[**阿里云盘open**](../guide/drivers/aliyundrive_open.md)即可,其他的暂时未知。
-:::
---
-::: en
-**Q**:no such host、TLS handshake timeout、read: connection reset by peer、dns lookup failed、connect: connection refused、Client.Timeout exceeded while awaiting headers、network is unreachable
-
-**A**:These problems are generally caused by network problems, and you can troubleshoot and solve them yourself.
-
-- If you encounter it when you add `Aliyun disk open`:TLS handshake timeout ([Click me to see how to solve](./why.md#prompt-when-adding-aliyun-drive-shared-prompt-post-https-auth-aliyundrive-com-v2-account-token-net-http-tls-handshake-timeout))
-
-:::
-::: zh-CN
**Q**:no such host、TLS handshake timeout、read: connection reset by peer、dns lookup failed、connect: connection refused、Client.Timeout exceeded while awaiting headers、network is unreachable
**A**:遇到这些问题一般都是网络问题导致的,自行排查然后解决。
- 如果是添加`阿里云盘open`时候遇到:TLS handshake timeout ([点击我查看如何解决](./why.md#添加阿里云盘-分享-时提示-提示post-https-auth-aliyundrive-com-v2-account-token-net-http-tls-handshake-timeout))
-:::
-
---
-::: en
-**Q**:Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path (**appears when mounting the driver**)
-
-**A**:The path to mount to, it is unique and cannot be repeated
-:::
-::: zh-CN
**Q**:Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path (**出现在挂载驱动时**)
**A**:要挂载到的路径,它是唯一的,不能重复
-:::
---
-::: en
-**Q**:Key: 'Storage.MountPath' Error:Field validation for 'MountPath' failed on the 'required' tag (**appears when mounting the driver**)
-
-**A**:The mount path is a required option, please fill in it
-:::
-::: zh-CN
**Q**:Key: 'Storage.MountPath' Error:Field validation for 'MountPath' failed on the 'required' tag(**出现在挂载驱动时**)
**A**:挂载路径是必填选项,填写一下
-:::
---
-::: en
-**Q**:UNIQUE constraint failed: x_meta.path (appears when adding meta information)
-
-**A**:When adding meta information, there can only be one path, and it cannot be repeated
-:::
-::: zh-CN
**Q**:UNIQUE constraint failed: x_meta.path(**出现在添加元信息时**)
**A**:添加元信息时路径只能有一个,不可以重复
-:::
---
-::: en
-**Q**:Key: 'Meta.Path' Error:Field validation for 'Path' failed on the 'required' tag (appears when adding meta information)
-
-**A**:When adding metadata, the path must be filled in
-:::
-::: zh-CN
**Q**:Key: 'Meta.Path' Error:Field validation for 'Path' failed on the 'required' tag(**出现在添加元信息时**)
**A**:添加元信息时,路径是必须要填写的
-:::
---
-::: en
-**Q**:failed get objs: failed to list objs: Sorry, sharing is not available in the current region(**PikPak/share**)
-
-**Q**:failed get objs: failed to list objs: terabox is not yet available in this are(**Terabox**)
-
-**A**:Domestic access is not supported, if you build it locally, you can check this [**Reference Solution**](https://anwen-anyi.github.io/index/07-wenti.html#_41-alist如何-使用-吃到-代理-proxy)
-
-- For example, Google, Mega, Terabox, etc. that require a proxy to access can be used in this way
-
-:::
-
-::: zh-CN
**Q**:failed get objs: failed to list objs: Sorry, sharing is not available in the current region(**PikPak/分享**)
**Q**:failed get objs: failed to list objs: terabox is not yet available in this are(**Terabox**)
@@ -184,141 +82,68 @@ This article will collect some error codes that may occur during the use of Open
- 例如 Google、Mega、Terabox 等这些需要代理才能访问的都可以通过这样的方法使用
-:::
-
---
-::: en
-**Q**:Search not available(**appears when indexing**)
-
-**A**:The `Search Index` option is not selected, and cannot be built and used. I don’t know which search index to choose? [**Click me to view**](../guide/advanced/search.md#difference-between-different-search-indexes)
-:::
-::: zh-CN
**Q**:Search not available(**出现在构建索引时**)
**A**:`搜索索引`选项没有选择,无法构建使用,不知道选择哪个搜索索引好?[**点我查看**](../guide/advanced/search.md#不同搜索索引之间的差异)
-:::
---
-::: en
-**Q**:only chinese and english, numbers and underscores are supported, and the length is no more than 50 (**Appears when the baidu.photo folder is renamed**)
-
-**A**:When renaming the baidu.photo folder, the maximum length is 50
-:::
-::: zh-CN
**Q**:only chinese and english, numbers and underscores are supported, and the length is no more than 50(**出现在一刻相册文件改名时**)
**A**:一刻相册文件夹改名时最大50长度
-:::
---
-::: en
-**Q**:failed get objs: failed to list objs: NotFound.FileId:The resource file_id cannot be found. file_id:634e704cefa78f92fefd4c779f7422d820082d041(**Add Alibaba cloud disk open**)
-
-**A**:When adding the open storage of Alibaba Cloud disk, `root folder ID` is wrong, which of the last ID above is the wrong ID, just get the correct replacement.
-:::
-::: zh-CN
**Q**:failed get objs: failed to list objs: NotFound.FileId:The resource file_id cannot be found. file_id:634e704cefa78f92fefd4c779f7422d820082d041(**添加阿里云盘open**)
**A**:添加阿里云盘open存储时,`根文件夹ID`错误上述最后哪个ID就是错误的ID去获取正确的替换即可
-:::
---
-::: en
-**Q**:System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat
-
-**A**:Your Tampermonkey answering plug-in conflicts, just close it [**For details, click to view**](https://github.com/alist-org/alist/discussions/2399)
-:::
-::: zh-CN
**Q**:System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat
**A**:你的油猴答题插件冲突了,关闭了即可[**详情查看点击查看**](https://github.com/alist-org/alist/discussions/2399)
-:::
---
-::: en
-**Q**:Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later.
-
-**A**:If you enter the wrong password for 6 consecutive logins, it will be locked, and you can reset it by restarting OpenList.
-:::
-::: zh-CN
**Q**:Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later.
**A**:连续登录输入6次密码错误就会锁定,重启OpenList即可重置。
-:::
---
-::: en
-**Q**:Failed get storage: please add a storage first. (**When adding offline download files**)
-
-**A**:When adding an offline download file, you need to enter which cloud disk you want to download the offline download file to and then click on the `folder` instead of adding it on the home page [**Complete Instructions**](../guide/advanced/offline-download.md)
-:::
-::: zh-CN
**Q**:Failed get storage: please add a storage first. (**添加离线下载内容时**)
**A**:添加离线下载文件时,你需要进入你想把离线下载的文件下载到哪个云盘然后就进入哪个`文件夹`,而不是在首页添加 [**完整使用说明**](../guide/advanced/offline-download.md)
-:::
---
-::: en
-**Q**:failed get objs: failed to list objs: Unable to retrieve user's mysite URL(**When adding onedrive_app**)
-
-**A**:The newly created `OneDrive` user account does not take effect in real time, Delay takes effect, wait for a few hours and try again [**Case**](https://github.com/alist-org/docs/discussions/189#discussioncomment-5928892)
-:::
-::: zh-CN
**Q**:failed get objs: failed to list objs: Unable to retrieve user's mysite URL(**添加onedrive_app时**)
**A**:新建的 `OneDrive`用户账号不是实时生效,会延时生效等待几小时后试试看 [**案例**](https://github.com/alist-org/docs/discussions/189#discussioncomment-5928892)
-:::
---
-::: en
-**Q**:failed to start: listen tcp 0.0.0.0:5244: bind: address already in use (**When starting the OpenList program**)
-
-**A**:Port number 5244 is already in use, check whether it is occupied (generally you have started an OpenList with port 5244), or modify the port number started by OpenList, [**How to modify**](../configuration/configuration.md#scheme)
-:::
-::: zh-CN
**Q**:failed to start: listen tcp 0.0.0.0:5244: bind: address already in use (**启动OpenList程序时**)
**A**:5244端口号已经被使用,排查是否被占用(一般来说你已经启动了一个5244端口的OpenList导致的),或者修改OpenList启动的端口号,[**如何修改**](../configuration/configuration.md#scheme)
-:::
---
-::: en
-**Q**:**[When OpenList upload file](why.md#why-do-i-get-413-http-code-when-i-upload-a-file)**:Request failed with status code 413
-
-**A**:Limit the size of the files configured nginx, modify the nginx's `client_max_body_size`,If you are a pagoda to go to the pagoda page to modify [Example](https://blog.csdn.net/u012514495/article/details/127981183)
-:::
-::: zh-CN
**Q**:**[OpenList上传文件时提示](why.md#为什么我在上传文件时得到-http-413-错误)**:Request failed with status code 413
**A**:Nginx配置的文件大小所限制,修改Nginx的`client_max_body_size`就可以,如果你是宝塔搭建的去宝塔页面修改[示例](https://blog.csdn.net/u012514495/article/details/127981183)
-:::
---
-::: en
-**Q**:**failed get objs: failed to list objs: query fail [61008]**
-
-**A**:It may be because some drivers do not support modifying the file sorting. Try to cancel the file sorting.
-:::
-::: zh-CN
**Q**:**failed get objs: failed to list objs: query fail [61008]**
**A**:可能是因为某些驱动不支持修改文件排序导致的,取消文件排序试试看
-:::
---
-::: zh-CN
**Q**:Docker 运行时查看日志,出现: FATA[2025-08-12 02:48:46] failed to create config file: open /opt/openlist/data/config.json: permission denied 。
**A**:挂载的目录与运行 Docker 的用户权限不一致导致的。解决方法:
@@ -339,28 +164,3 @@ docker run -d --name openlist --user 1000:1000 -v ${yourDataDir}:/opt/openlist/d
sudo chown -R 1001:1001 ${yourDataDir}
docker run -d --name openlist -v ${yourDataDir}:/opt/openlist/data -p 5244:5244 openlistteam/openlist
```
-
-:::
-::: en
-**Q**:When running `docker logs openlist`, the error appears: FATA[2025-08-12 02:48:46] failed to create config file: open /opt/openlist/data/config.json: permission denied 。
-
-**A**:This is caused by the directory mounted not matching the user permissions running the docker. The solution:
-
-1. Use the `--user` parameter to specify the user running the container, assuming the user is `1000:1000`.
-
- First, ensure that the `${yourDataDir}` directory has permissions of `1000:1000`. If not, use `sudo chown -R 1000:1000 ${yourDataDir}` to change the directory permissions.
-
- Then run the Docker with the following command:
-
-```bash
-docker run -d --name openlist --user 1000:1000 -v ${yourDataDir}:/opt/openlist/data -p 5244:5244 openlistteam/openlist
-```
-
-2. Change the owner of the `${yourDataDir}` directory to `1001:1001`, and then run the Docker:
-
-```bash
-sudo chown -R 1001:1001 ${yourDataDir}
-docker run -d --name openlist -v ${yourDataDir}:/opt/openlist/data -p 5244:5244 openlistteam/openlist
-```
-
-:::
diff --git a/pages/faq/howto.md b/pages/faq/howto.md
index 569aae1ee..d64705eb9 100644
--- a/pages/faq/howto.md
+++ b/pages/faq/howto.md
@@ -1,57 +1,17 @@
---
-# This is the title of the article
-title:
- en: How to
- zh-CN: 怎么做
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 1
-# A page can have multiple categories
categories:
- faq
-# A page can have multiple tags
---
-## How to add password for a file/folder? { lang="en" }
+# 怎么做
-## 如何为文件/文件夹添加密码? { lang="zh-CN" }
+## 如何为文件/文件夹添加密码?
-:::en
-Add a [meta](../guide/advanced/meta.md) record.
-:::
-:::zh-CN
添加[元信息](../guide/advanced/meta.md)
-:::
-
-## How to reverse proxy with sub directory? { lang="en" }
-## 如何对子目录进行反向代理? { lang="zh-CN" }
+## 如何对子目录进行反向代理?
-:::en
-An example of using nginx to reverse proxy to https://example.com/openlist:
-
-- Normal installation
-- Set [site_url](../configuration/configuration.md#site-url) to `https://example.com/openlist` or just `/openlist` then restart openlist
-- Add a reverse proxy record in nginx
-
-```nginx
-location /openlist/ {
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Range $http_range;
- proxy_set_header If-Range $http_if_range;
- proxy_redirect off;
- proxy_pass http://127.0.0.1:5244/openlist/;
- # the max size of file to upload
- client_max_body_size 20000m;
-}
-```
-
-:::
-:::zh-CN
使用 nginx 反向代理到 https://example.com/openlist 的示例:
- 正常安装
@@ -73,24 +33,8 @@ location /openlist/ {
}
```
-:::
-
-## How to get password if i forget it? { lang="en" }
-
-## 忘记密码怎么办? { lang="zh-CN" }
-
-:::en
-If the password is forgotten, it can only be re-**`randomly generated`** or **`manually set`**
+## 忘记密码怎么办?
-```bash
-# Randomly generate a password
-./openlist admin random
-# Manually set a password, `NEW_PASSWORD` refers to the password you need to set
-./openlist admin set NEW_PASSWORD
-```
-
-:::
-:::zh-CN
如果忘记了密码只能通过重新 **`随机生成`** 或者 **`手动设置`**
```bash
@@ -100,122 +44,42 @@ If the password is forgotten, it can only be re-**`randomly generated`** or **`m
./openlist admin set NEW_PASSWORD
```
-:::
-
-## How to modify the listening port { lang="en" }
+## 如何修改监听端口
-## 如何修改监听端口 { lang="zh-CN" }
-
-:::en
-Refer to [config](../configuration/configuration.md#scheme)
-:::
-:::zh-CN
参考[config](../configuration/configuration.md#scheme)
-:::
-
-## How to upgrade { lang="en" }
-
-## 如何更新 { lang="zh-CN" }
-:::en
-Except for the incompatible version marked in the changelog, you can directly replace the binary file to upgrade.
+## 如何更新
-For Docker user, just remove the old container and pull the new image then run it.
-:::
-:::zh-CN
除了 Changelog 中标注的不兼容版本,通常可以直接替换二进制文件进行更新。
对于 Docker 用户,只需删除旧的容器并拉取新的 Docker 镜像,然后运行它即可。
-:::
-
-## How to allow guest to upload files { lang="en" }
-## 如何允许访客上传文件 { lang="zh-CN" }
+## 如何允许访客上传文件
-:::en
-Add a [meta](../guide/advanced/meta.md) record, and open `write` field.
-:::
-:::zh-CN
添加[元信息](../guide/advanced/meta.md),并启用 `写入`。
-:::
-## How to remove "Powered by OpenList" at the bottom? { lang="en" }
+## 如何去掉底部的"由 OpenList 驱动"?
-## 如何去掉底部的"由 OpenList 驱动"? { lang="zh-CN" }
-
-:::en
-According to our open source license:
-Permissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. **Copyright and license notices must be preserved.** Contributors provide an express grant of patent rights. When a modified version is used to provide a service over a network, the complete source code of the modified version must be made available.
-:::
-:::zh-CN
根据我们的开源许可:
此最强copyleft许可的权限以在同一许可下提供许可作品和修改的完整源代码为条件,其中包括使用许可作品的较大作品。**版权和许可声明必须保留** 贡献者明确授予专利权。当使用修改后的版本通过网络提供服务时,必须提供修改后版本的完整源代码。
-:::
-## When adding a 189 Cloud storage: the device ID does not exist, and a secondary device verification is required { lang="en" }
+## 添加 天翼云盘 云存储时:设备 ID 不存在,需要二次设备验证
-## 添加 天翼云盘 云存储时:设备 ID 不存在,需要二次设备验证 { lang="zh-CN" }
-
-:::en
-Open the Tianyi Account website at , log in, and then disable the Device Lock..
-:::
-:::zh-CN
打开天翼账号网站 ,登陆后关掉设备锁即可。
-:::
-## When adding 189 Cloud PC storage: prompt need img validate code: verification code { lang="en" }
-
-## 添加 天翼云盘客户端 存储时:提示 need img validate code: 验证码 { lang="zh-CN" }
-
-:::en
-
-- Click Edit, write the verification code you just saw into the configuration and click Save
-- Click Edit and turn on the Do not use OCR button
-- Or build it yourself [**Ocr interface**](../configuration/global.md#ocr-api)
-- **189 Cloud** Driver has been replaced with sliding verification code because web login has been replaced.**No longer supports OCR and manual input**, if the verification code needs to be used, please use the addition of `Cookie to log in` or use the `189 Cloud PC` Driver. Note: The 189 Cloud Driver is different from the 189 Cloud PC Driver.
-
-:::
-:::zh-CN
+## 添加 天翼云盘客户端 存储时:提示 need img validate code: 验证码
- 点击编辑,将刚才看到的验证码输入配置中,并点击保存。
- 点击编辑并开启“不使用 OCR”按钮。
- 或者自行搭建 [**OCR 接口**](../configuration/global.md#ocr-接口)。
- **天翼云盘** 驱动已被滑动验证码取代,因为网页登录方式已更改。**不再支持 OCR 和手动输入**,如果需要使用验证码,请使用 `Cookie 登录` 或者使用 `天翼云盘客户端` 驱动。注意:天翼云盘 驱动与 天翼云盘客户端 驱动不同。
-:::
-
-## TLS handshake timeout? / read: connection reset by peer? / dns lookup failed? / connect: connection refused / Client.Timeout exceeded while awaiting headers? / no such host? { lang="en" }
-
-## TLS handshake timeout? / read: connection reset by peer? / dns lookup failed? / connect: connection refused / Client.Timeout exceeded while awaiting headers? / no such host? { lang="zh-CN" }
+## TLS handshake timeout? / read: connection reset by peer? / dns lookup failed? / connect: connection refused / Client.Timeout exceeded while awaiting headers? / no such host?
-:::en
-For network problems such as these, please troubleshoot and solve them yourself.Don't create any issues for this.
-:::
-:::zh-CN
诸如此类的网络问题,请自行排查解决。不要为此提出任何的issue
-:::
-## How to add epub reading { lang="en" }
-
-## 怎么添加epub阅读器 { lang="zh-CN" }
-
-:::en
-Background --> Settings --> Preview --> Iframe preview, written behind the PDF
-
-```html{2-5}
- /*The comma below is also oh, don’t copy this comment, start copying from the second line*/
-,
- "epub": {
- "EPUB.js":"/static/epub.js/viewer.html?url=$e_url"
- }
-```
+## 怎么添加epub阅读器
-Version 3.7.x and higher already support ".epub" reading
-But you need to add it manually (because the database has already been created, it is not good to overwrite it for you, and you will make mistakes)
-If it is the first installation and startup (version 3.7.x and higher), no need to add it manually
-If the secondary directory reverse generation is set, please add the corresponding prefix in [site_url](../configuration/configuration.md#site-url), and then restart OpenList to take effect
-:::
-:::zh-CN
后台 ——>设置——>预览——>Iframe 预览,写在PDF后面
```html{2-5}
@@ -230,49 +94,20 @@ If the secondary directory reverse generation is set, please add the correspondi
但是需要自己手动添加(因为已经创建过数据库了 不好给你覆盖会出错)
如果是第一次安装启动(3.7.x版本及更高的版本)不用手动添加
如果设置了二级目录反代,请在[site_url](../configuration/configuration.md#site-url)中自行添加相应前缀,然后重启OpenList才会生效
-:::
-### How to quickly locate bugs { lang="en" }
-
-### 如何快速定位Bug { lang="zh-CN" }
-
-:::en
-If you find a bug, but the `log.log` log is not detailed, you can try to add the `--debug` parameter to start
-
-It is recommended to clear the log file `/log/log.log` in the **OpenList directory before starting with the `--debug` parameter**, so that developers can quickly locate problems later
-
-:::
-:::zh-CN
+### 如何快速定位Bug
如果发现Bug,但是`log.log`的日志不详细,可以尝试在 启动时候添加 `--debug` 参数启动
建议在使用`--debug` 参数启动之前将 **OpenList目录下的日志文件`/log/log.log` 清空**,这样方便开发者们后续快速定位问题
-:::
-:::en
-::: danger
-When using the `--debug` parameter to start, there will be some sensitive data such as **`account password, refresh token`**, etc., so if you need to desensitize before sending it to others
-:::
-:::zh-CN
::: danger
使用`--debug`参数启动时,会有一些敏感数据 例如 **`账号密码,刷新令牌`** 等,所以如果在你发给别人之前需要先处理一下脱敏
:::
-:::en
-
-- **Windows**:`openlist.exe server --debug`
-- **Linux**:`./openlist server --debug`
-- **Mac**: `./openlist server --debug`
-- **Docker**:`docker exec -it openlist ./openlist server --debug` (to be modified, because this command runs OpenList in an already started container, so it will not start a second OpenList)
-
-How to stop the relevant logs after startup? `Ctrl+C` can stop the program (or simply close the program directly)
-:::
-:::zh-CN
-
- **Windows**:`openlist.exe server --debug`
- **Linux**:`./openlist server --debug`
- **Mac**:`./openlist server --debug`
- **Docker**:`docker exec -it openlist ./openlist server --debug` (待修改,因为该命令是在已经启动的容器内运行OpenList,所以不会启动第二个OpenList)
启动后拿到相关日志,如何停止? `Ctrl+C` 可以使程序停止运行(或者简单粗暴直接关闭程序)
-:::
diff --git a/pages/faq/index.md b/pages/faq/index.md
index 087b8bac8..2e7933f58 100644
--- a/pages/faq/index.md
+++ b/pages/faq/index.md
@@ -1,5 +1,3 @@
----
-title: FAQ
----
+# FAQ
diff --git a/pages/faq/seealso.md b/pages/faq/seealso.md
index a12396e90..9dbf994e5 100644
--- a/pages/faq/seealso.md
+++ b/pages/faq/seealso.md
@@ -1,37 +1,12 @@
---
-# This is the title of the article
-title: See also
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 1
-# A page can have multiple categories
categories:
- faq
-# A page can have multiple tags
---
-### **The following resources may help you** { lang="en" }
+# See also
-### **以下资源可能会对您有所帮助** { lang="zh-CN" }
-
-:::en
-
-> Third party tutorials and information may be outdated and incorrect, and no warranty of availability is made here.
-
-[https://space.bilibili.com/36411485/channel/collectiondetail?sid=686340](https://space.bilibili.com/36411485/channel/collectiondetail?sid=686340)
-
-[https://anwen-anyi.github.io/](https://anwen-anyi.github.io/index/)
-
-[Google](https://www.google.com/search?q=openlist)
-
-[Bing](https://www.bing.com/search?q=openlist)
-
-[Baidu](https://www.baidu.com/baidu?wd=openlist)
-
-:::
-
-:::zh-CN
+### **以下资源可能会对您有所帮助**
> 第三方教程和信息可能已过时且不正确,此处不保证可用性。
@@ -44,5 +19,3 @@ categories:
[Bing](https://www.bing.com/search?q=openlist)
[Baidu](https://www.baidu.com/baidu?wd=openlist)
-
-:::
diff --git a/pages/faq/why.md b/pages/faq/why.md
index c46990f41..fde551f26 100644
--- a/pages/faq/why.md
+++ b/pages/faq/why.md
@@ -1,82 +1,30 @@
---
-# This is the title of the article
-title:
- en: Why
- zh-CN: 为什么
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 1
-# A page can have multiple categories
categories:
- faq
-# A page can have multiple tags
---
-## Why I got the error `failed get storage: can't find storage with rawPath: /` when I open web pages after install/upgrade? { lang="en" }
+# 为什么
-## 为什么我在安装/升级后打开网页时出现错误 `failed get storage: can't find storage with rawPath: /`? { lang="zh-CN" }
+## 为什么我在安装/升级后打开网页时出现错误 `failed get storage: can't find storage with rawPath: /`?
-::: en
-Because you haven't added storage. Click the `Login` button at the bottom to log in and then click `Manage` button to enter the background and add storage on the storage page.
-:::
-::: zh-CN
因为你还没有添加任何存储,点击底部登录后再次点击管理进入后台在存储页面添加存储。
-:::
-## why i lost all my storage in v3 { lang="en" }
+## 为什么我在 v3 中丢失了所有存储空间
-## 为什么我在 v3 中丢失了所有存储空间 { lang="zh-CN" }
-
-::: en
-New versions (V3 and later) are not compatible with V2, so you need to re-add your storage.
-:::
-::: zh-CN
新版本(V3 及更高版本)与 V2 不兼容,因此您需要重新添加存储。
-:::
-
-## Why I see `failed get aria2 version` error in log? { lang="en" }
-## 为什么我在日志中看到 `failed get aria2 version` 错误? { lang="zh-CN" }
+## 为什么我在日志中看到 `failed get aria2 version` 错误?
-::: en
-Because you haven't installed aria2 or the settings of aria2 are wrong. Don't worry, it won't affect the use of OpenList, you can ignore it.
-:::
-::: zh-CN
因为你没有安装 aria2 或者 aria2 的设置不对。不用担心,它不会影响 OpenList 的使用,你可以忽略它。
-:::
-## why i got the error `Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path` when I add new storage? { lang="en" }
+## 为什么我在添加新存储时收到错误 “Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path”?
-## 为什么我在添加新存储时收到错误 “Failed create storage in database: UNIQUE constraint failed: x_storages.mount_path”?{ lang="zh-CN" }
-
-::: en
-I guess the error message is pretty clear. Because [mount_path](../guide/drivers/common.md#mount-path) is **UNIQUE**.
-If you see this error when adding storage, but you don't see the corresponding duplicate entry on the web page, use `Ctrl` + `F5` to force refresh page.
-:::
-::: zh-CN
想必错误信息表达的很清楚了。因为 [挂载路径](../guide/drivers/common.md#挂载路径) 是**独一无二**的。
如果你在添加存储时看到了这个错误,但是你并没有在管理页面看到对应的重复条目,请使用 `Ctrl` +`F5` 强制刷新页面
-:::
-
-## Why can't I preview the video or audio file? { lang="en" }
-
-## 为什么我不能预览视频或音频文件? { lang="zh-CN" }
-
-::: en
-
-- Requires a browser-supported encoding
-- General browsers do not support h265 encoded video
-- General browsers do not support ac3 encoded audio
-
-In particular, for Safari:
-- For cross-origin media, content-type must be the media type, not the generic application/octet-stream. So if the content-type returned by the direct link is application/octet-stream, then Safari will not be able to play.(PS: Why Can AliyunDrive play in Safari? Because the official website of the video playback is not the use of download links, but after the transcoding of AliyunDrive)
-- Aliyun disk development platform driver supports online video playback (also limited to Aliyun disk open platform driver and **Aliyun Video Previewer** option player)
-
-:::
-::: zh-CN
+## 为什么我不能预览视频或音频文件?
- 需要浏览器支持的编码才可以正常预览
- 一般浏览器不支持 H.265 编码视频
@@ -87,25 +35,8 @@ In particular, for Safari:
- 对于跨域媒体,content-type 必须是媒体类型,而不是通用的 application/octet-stream。所以如果直链返回的 content-type 是 application/octet-stream,那么 Safari 就无法播放了。(PS:为什么 AliyunDrive 可以在 Safari 中播放?因为官网的视频播放不是使用的下载链接,是经过 AliyunDrive 转码后的)
- 阿里云盘开发平台驱动支持在线播放视频(也仅限于阿里云盘开放平台驱动并且是 **Aliyun Video Previewer** 选项播放器)
-:::
-
-## Why can't I preview the office file? { lang="en" }
+## 为什么我不能预览 Office 文件?
-## 为什么我不能预览 Office 文件? { lang="zh-CN" }
-
-::: en
-For microsoft office online viewers, you need:
-
-- External network access
-- The document access address cannot use ip directly, it needs to be accessed through a domain name, and the port must be port 80 / 443
-- The format of the document (must be one of the following):
-- Word: docx, docm, dotm, dotx
-- Excel: xlsx, xlsb, xls, xlsm
-- PowerPoint: pptx, ppsx, ppt, pps, pptm, potm, ppam, potx, ppsm
-- Document size: Word and PowerPoint documents must be less than 10 megabytes; Excel must be less than five megabytes
-
-:::
-::: zh-CN
对于 Microsoft Office 在线查看器,您需要:
- 外部网络访问
@@ -116,129 +47,42 @@ For microsoft office online viewers, you need:
- PowerPoint:pptx、ppsx、ppt、pps、pptm、potm、ppam、potx、ppsm
- 文档大小:Word 和 PowerPoint 文档必须小于 10 MB; Excel 必须小于 5 MB
-:::
-
-## Why can't I preview the PDF file? { lang="en" }
-
-## 为什么我不能预览 PDF 文件? { lang="zh-CN" }
-
-::: en
-
-- We use `pdf.js` as the default PDF previewer. So it requires https+cors.
-- https is opened for yourself, reverse proxy or provide a certificate in the configuration file
-- cors provides support for related cloud disks and cannot be modified by yourself unless the agent is turned on to use the program to transfer
-
-:::
-::: zh-CN
+## 为什么我不能预览 PDF 文件?
- 我们使用 `pdf.js` 作为默认的 PDF 预览器。所以它需要 HTTPS + CORS。
- HTTPS 需要自行打开,可以使用反向代理或在配置文件中提供证书
- CORS 由相关云盘提供支持,不能自行修改,除非开启代理功能,使用程序传输
-:::
-
-## Why can't package download? { lang="en" }
-
-## 为什么无法打包下载?{ lang="zh-CN" }
-
-::: en
-Same as pdf preview, requires https+cors support,and:
+## 为什么无法打包下载?
-- OpenList use stream API of browser to support package download, so it requires browser support. Usually, it is supported by new browsers, such as Chrome, Firefox, Edge, etc.
-
-:::
-::: zh-CN
与 PDF 预览相同,需要 HTTPS 和 CORS 支持,并且:
- OpenList 使用浏览器的 stream API 来支持打包下载,所以需要浏览器支持。通常这个 API 会被主流浏览器支持,例如 Chrome、Firefox、Edge 等。
-:::
-
-## Why does it shows `Uploading in the backend` when I upload a file? { lang="en" }
-
-## 为什么我上传文件时显示 `Uploading in backend`? { lang="zh-CN" }
-
-::: en
-
-- All uploads of this program use server transfer, which will consume server traffic to communicate with the corresponding storage API
-
-:::
-::: zh-CN
+## 为什么我上传文件时显示 `Uploading in backend`?
- 本程序所有上传均使用服务器传输,会消耗服务器流量与对应存储的API通信
-:::
-
-## Why do i get `413` http code when i upload a file? { lang="en" }
-
-## 为什么我在上传文件时得到 HTTP 413 错误? { lang="zh-CN" }
-
-::: en
-
-- If you use a reverse proxy, you may need to specify the maximum upload file size(`client_max_body_size`) and timeout in the web server configuration
-- Otherwise, it may happen that the upload is successful but the front end times out and there is no response
-
-:::
-
-::: zh-CN
+## 为什么我在上传文件时得到 HTTP 413 错误?
- 如果使用反向代理,可能需要在配置中指定最大上传文件大小(`client_max_body_size`)和超时时间
- 否则可能会出现上传成功但回应被web服务器阻止,导致前端超时无响应的情况
-:::
-
-## Why can't I download files after add `AliyunDirve` storage and get `InvalidArgument` error? { lang="en" }
+## 为什么添加了 `AliyunDrive` 存储后下载不了文件,出现 `InvalidArgument` 错误?
-## 为什么添加了 `AliyunDrive` 存储后下载不了文件,出现 `InvalidArgument` 错误? { lang="zh-CN" }
-
-::: en
-::: warning
-This is an outdated driver that has been abandoned, is no longer maintained, and will be removed in future versions. We recommend using the officially supported Aliyundrive Open.
-[**Click to view this guide**](../guide/drivers/aliyundrive_open.md)
-:::
-
-::: zh-CN
::: warning
这是一个过时的驱动,已废弃,不再维护,并将在未来的版本中删除。我们建议使用官方支持的阿里云盘Open驱动。
[**点击查看这篇说明**](../guide/drivers/aliyundrive_open.md)
:::
-::: en
-Due to referrer restrictions, mobile tokens must be used if you don't open any proxy.
-:::
-::: zh-CN
由于 referer 限制,如果您不打开程序的任何代理中转功能,则必须使用移动端的 `refresh token`
-:::
-
-## Why is the uploaded file not displayed/deleted file still/modified in the root directory does not take effect? { lang="en" }
-## 为什么上传的文件不显示/删除的文件还在/修改根目录不生效? { lang="zh-CN" }
+## 为什么上传的文件不显示/删除的文件还在/修改根目录不生效?
-::: en
-There is a half-hour cache by default, which can be modified on the Add Storage page. If you need to refresh immediately, click the refresh button in the lower right corner of the directory that needs to be refreshed.
-:::
-::: zh-CN
默认有半个小时的缓存,可以在添加存储页面修改。如果需要立即刷新,在需要刷新的目录点击右下角的刷新按钮即可。
-:::
-
-## Why is it still incorrect although I input the password that get by `./openlist admin` in terminal? { lang="en" }
-
-## 为什么我通过在终端输入`./openlist admin`获取的密码还是不正确? { lang="zh-CN" }
-::: en
-Check whether the directory you run `./openlist admin` and start OpenList is the same. OpenList reads the configuration in the current directory where you run the program by default, so running in different directorys will result in different data being read.
-
----
-
-- **Here take Windows as an example**: For example, your OpenList file is in the **`D:\Test\OpenList\`** folder, and then you directly start the CMD command running window on the desktop, and then put the D drive Drag the OpenList inside to the command running window to start, and then the configuration file it generates is actually in **`C:\Windows\System32`** here (because CMD is here by default), and then you Obtaining the password is also obtaining the password in this folder. At the same time, because OpenList reads the password in the configuration file in the same directory as OpenList, it is naturally wrong for you to log in with the password.
- - 
-- Solution: You need to go to the folder where OpenList is located to start or check the password, for example, the above is in **`D:\Test\OpenList\`**, you have to manually go to this folder and then enter Enter the startup command or the command to view the password to obtain the correct password
- - **Windows**: After going to the directory where OpenList is located, enter CMD in the top address bar and press Enter, and then use the command to obtain the password
- - 
- - **Linux**: Use the CD command to go to the directory where OpenList is located to get the correct password
+## 为什么我通过在终端输入`./openlist admin`获取的密码还是不正确?
-:::
-::: zh-CN
检查你运行`./openlist admin`和启动OpenList的目录是否相同。 OpenList默认会读取你运行程序的当前目录下的配置,所以在不同的目录下运行会导致读取的数据不同。
---
@@ -250,66 +94,18 @@ Check whether the directory you run `./openlist admin` and start OpenList is the
- 
- **Linux**:使用CD命令 到OpenList所在的目录即可获取正确密码
-:::
-
-## Why does it prompt System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat { lang="en" }
+## 为什么提示 System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat
-## 为什么提示 System error: SyntaxError: Invalid regular expression: /?/: Nothing to repeat { lang="zh-CN" }
-
-::: en
-This is caused by the conflict between some scripts in the Tampermonkey extension and the webpage code, such as some automatic answering scripts.
-Please check and disable the relevant scripts on your own.
-:::
-::: zh-CN
由于油猴插件中的某些脚本与网页代码冲突导致的,例如某些自动答题脚本。
请自行检查并禁用相关脚本。
-:::
-
-## What is the difference between the two uploads? { lang="en" }
-
-## 两个上传有什么区别? { lang="zh-CN" }
-
-::: en
-
-1. **stream** directly puts the binary content of the file into the body, so that the backend can use very little memory, it seem to have no downsides.
-
-2. **form** is to wrap the file into formdata and upload it. The memory used by the backend will be more, but there is no limit on the size.
-
-:::
-::: zh-CN
+## 两个上传有什么区别?
1. **stream** 直接把文件二进制内容放进body中,这样后端可以使用很少的内存,似乎没有什么其他的缺点。
2. **form** 是把文件包裹成formdata上传,后端使用的内存会多一些,但是不限制大小。
-:::
-
-## What is the difference between the two Aria2? { lang="en" }
-
-## 两个Aria2有什么不同? { lang="zh-CN" }
-
-::: en
-
-1. Background management --> Settings --> Others: **Aria2 here is used to download resources offline to the network disk**
-
-2. Front-end interface --> Local settings (the gear in the lower right corner) --> **Aria2 here is used to download the resources in the network disk to the local, which is equivalent to a download method, everyone can use it without worrying about problems**
-
-- As for how to use the first offline download:
- - For example, if you want to download some resources offline in the **`/OneDrive/TV/Test`** folder, you must first fill in the **address and secret key information** in the background and then manually enter the front end In this folder of the interface, you can see the **offline download** icon (a magnet style) in the lower right corner after entering it, click and enter the link you want to download offline
- - `Description`: **Offline download, copy and upload** are all in the same way. They are first downloaded from the resource **to the temporary folder of the server** and then uploaded from the **server to the corresponding network disk**
- - "Copy" can be directly transferred by the server without temporary storage for uploads that **partially do not require** to calculate the Hash value.
-
-```mermaid
-flowchart LR
- A([ready]) --> B[Download to a temporary folder]
- B --> C[The server uploads]
- C --> D[Upload to the network disk]
- D --> E([end])
-```
-
-:::
-::: zh-CN
+## 两个Aria2有什么不同?
1. 后台管理 --> 设置 --> 其他:**这里的Aria2是用于离线下载资源到网盘内**
@@ -328,58 +124,20 @@ flowchart LR
D --> E([完毕])
```
-:::
-
-## RaiDrive mounts Baidu network disk, you can download files, but you cannot upload files. Throwing files to the mount directory prompts "Prompt "You need permission to perform this operation". How to solve this? { lang="en" }
+## RaiDrive挂载百度网盘,可以下载文件,不能上传文件。往挂载目录丢文件提示“提示“你需要权限来执行此操作”。这个怎么解决?
-## RaiDrive挂载百度网盘,可以下载文件,不能上传文件。往挂载目录丢文件提示“提示“你需要权限来执行此操作”。这个怎么解决? { lang="zh-CN" }
-
-::: en
-Raidrive is because uploading a file will create an empty file in advance, and Baidu Netdisk does not allow the creation of an empty file.
-:::
-::: zh-CN
Raidrive 是因为上传文件会预先创建一个空文件 而百度网盘不允许创建空文件。
-:::
-
-## Why is the Terabox mounted successfully but the content is not displayed? { lang="en" }
-
-## 为什么 Terabox 挂载成功了 但是不显示内容? { lang="zh-CN" }
-
-::: en
-Because **`Terabox`** restricts IP, if you access it from a non-overseas IP, you cannot access it, and naturally the content will not be displayed.
-(Overseas machines can be used. If you have to use local machines (or domestic machines) to build, you can find a way to let OpenList eat **proxy**)
+## 为什么 Terabox 挂载成功了 但是不显示内容?
-**Note: Check the relevant settings to ensure that traffic related to '\*.terabox.com' goes through the **proxy\***\*
-:::
-::: zh-CN
因为 **`Terabox`\*\* 限制IP,如果你是本机非海外IP访问,是无法访问的,自然不会显示内容。
(可以用海外的机器,如果非得用本机(或者国内的机器)搭建,那你自己想办法让OpenList吃到**proxy**就可以)
**注意:检查相关设置以确保'\*.terabox.com'相关流量经过**proxy\*\*\*\*
-:::
-
-## Open OpenList prompt System error: TypeError: n.replaceAll is not a function? { lang="en" }
-## 打开 OpenList 提示 System error: TypeError:n.replaceAll is not a function? { lang="zh-CN" }
+## 打开 OpenList 提示 System error: TypeError:n.replaceAll is not a function?
-::: en
-Your browser kernel version is too low, just add the following to the custom head.
-
-```html
-
-
-```
-
-If you think it is too slow, you can change to Ali Cloud
-
-```html
-
-```
-
-:::
-::: zh-CN
你的浏览器内核版本太低,将如下添加到自定义头部即可.
```html
@@ -393,83 +151,31 @@ If you think it is too slow, you can change to Ali Cloud
```
-:::
+## Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later.
-## Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later. { lang="en" }
-
-## Too many unsuccessful sign-in attempts have been made using an incorrect username or password, Try again later. { lang="zh-CN" }
-
-::: en
-
-
-If you enter the wrong password for 6 consecutive logins, it will be locked, and you can reset it by restarting OpenList.
-:::
-::: zh-CN

连续登录输入6次密码错误就会锁定,重启OpenList即可重置。
-:::
-
-## When adding a file to upload, there is an option of "add as task", what does it do? { lang="en" }
-## 添加文件上传时,有一个“添加为任务“的选项,是做什么的? { lang="zh-CN" }
-
-::: en
-
-- After checking, upload to the server (the machine where OpenList is built), and then when uploaded by the server to the network disk, it seems to be visible in the background (it seems to be like this)
-- You will not see it if it is not checked. For details, you can see the problem in the picture below.
-
-
-:::
-::: zh-CN
+## 添加文件上传时,有一个“添加为任务“的选项,是做什么的?
- 勾选后上传到服务器(搭建OpenList的机器),再由服务器上传时到网盘时后台似乎能看到(好像是这样的)
- 未勾选不会看到,具体的大家可以看下图应该能看出什么问题.

-:::
-
-## I am asked to enter the OTP code when I log in. What is the reason? { lang="en" }
-
-## 登陆时要求输入OTP代码,请问是什么原因? { lang="zh-CN" }
-::: en
-Are you logging into someone else's account? If it is your own, please enter the 2FA (two-step verification) verification code
+## 登陆时要求输入OTP代码,请问是什么原因?
-What? Don't know the verification code? [**Click to view this guide**](../guide/advanced/2fa.md)
-:::
-::: zh-CN
你是不是在登录别人的账号?如果是自己的请输入2FA(两步验证)验证码
什么?不知道验证码?[**点击查看这篇说明**](../guide/advanced/2fa.md)
-:::
-## Use **`sqlite3`** to find that there are more than two files in the data folder, data.db-shm and data.db-wal { lang="en" }
+## 使用 **`sqlite3`** 发现 data 文件夹里面出现 data.db-shm、data.db-wal 两个多的文件
-## 使用 **`sqlite3`** 发现 data 文件夹里面出现 data.db-shm、data.db-wal 两个多的文件 { lang="zh-CN" }
-
-::: en
-These are temporary files created by SQLite in WAL mode to support database transaction processing and concurrent access. The .db-shm file is a shared memory file used to store temporary data, while the .db-wal file is a write-ahead log file that records transaction changes for rollback in case of transaction failure. These two files are associated with the .db file, and it is not recommended to delete them arbitrarily.
-:::
-::: zh-CN
这是SQLite在WAL模式下创建的临时文件,用于支持数据库的事务处理和并发访问。.db-shm是一个共享内存文件,用于存储临时数据,而.db-wal是一个写前日志文件,用于记录事务的变更,以便在事务失败时进行回滚。这两个文件和.db文件相关联,不建议随意删除。
-:::
-
-## **How do I set it so that visitors can only see the content after logging in?** { lang="en" }
-
-## **想让游客登录后才能看到内容怎么设置?** { lang="zh-CN" }
-
-::: en
-There is always one of the following three versions that suits you. Eat it quickly! !
-1. Point the directory seen by **`guest`** users to an empty folder, and then write a readme description, don’t ask how to do it yourself[Click to view](#how-to-create-a-completely-blank-folder)
+## **想让游客登录后才能看到内容怎么设置?**
-2. Directly encrypt the root directory in the meta information
-
-3. Directly deactivate the **`guest`** user, which will force a jump to the login page (version 3.10.1 and above) - Find a way by yourself Welcome to provide new ways~~
-
-:::
-::: zh-CN
以下三种版本总有一款适合你 快速速食用吧!!
4. 将 **`guest`** 用户看到的目录 指向一个空文件夹,然后写一个readme说明,别问怎么弄自行操作[点击查看](#如何新建一个完全空白的文件夹)
@@ -477,25 +183,8 @@ There is always one of the following three versions that suits you. Eat it quick
6. 直接将 **`guest`** 用户停用,这样会强制跳转到登录页面(3.10.1及以上版本)
- 自行寻找办法 欢迎提供新的办法~~
-:::
+## 百度云盘非官方下载报错出现"hit black userlist , hit illeage dlna"
-## Baidu cloud disk unofficial download error appears "hit black userlist, hit illegal dlna" { lang="en" }
-
-## 百度云盘非官方下载报错出现"hit black userlist , hit illeage dlna" { lang="zh-CN" }
-
-::: en
-It should be repaired harmoniously, but the interface discoverer said to wait for 24 hours to try, if it still doesn't work, it is really repaired harmoniously.
-
-```json
-{
- "error_code": 31329,
- "error_msg": "hit black userlist , hit illegal dlna",
- "request_id": 8942439159334999112
-}
-```
-
-:::
-::: zh-CN
应该是和谐修复了,但是接口发现者说等待24小时试试看,如果还是不行就是真的和谐修复了。
```json
@@ -506,27 +195,8 @@ It should be repaired harmoniously, but the interface discoverer said to wait fo
}
```
-:::
-
-## How to create a completely blank folder { lang="en" }
-
-## 如何新建一个完全空白的文件夹 { lang="zh-CN" }
-
-::: en
-two ways
+## 如何新建一个完全空白的文件夹
-1. Mount a local storage, select the folder is empty
-2. Select virtual storage and directly change **"number of files" "number of folders"** to 0, save and then ignore the pop-up interface
- - What does **Virtual Storage** do? It is generally used during testing. Don’t use it indiscriminately if you don’t understand the normal production environment....
-
-How to add **`Readme`** instructions to an empty folder
-
-1. If you choose local storage, you can consider throwing a Readme.md file into it. If there is an update but the refresh is slow, use the second method if it is too slow
-2. Meta information Select this folder, there are instructions below to write it yourself
-
-What is the use of creating this blank folder? It can be used in conjunction with [**How to set up visitors to access the content after logging in, use the first method**](#how-do-i-set-it-so-that-visitors-can-only-see-the-content-after-logging-in)
-:::
-::: zh-CN
两种方法
1. 挂载一个本地存储,选择文件夹里面是空的就可以
@@ -539,50 +209,17 @@ What is the use of creating this blank folder? It can be used in conjunction wit
2. 元信息 选择这个文件夹,下面有说明自己写就行
建这个空白文件夹有啥用?可以配合[**想让游客登录后才能看到内容怎么设置的第一条办法使用**](#想让游客登录后才能看到内容怎么设置)使用
-:::
-
-## lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./openlist) or accept: function not implemented { lang="en" }
-
-## lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./openlist)或者 accept: function not implemented { lang="zh-CN" }
-::: en
-Consider using the **musl** version as an alternative due to the version of the **glibc** on your platform is too low,or use docker version.
+## lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./openlist)或者 accept: function not implemented
-:::
-::: zh-CN
考虑使用 **musl** 版本作为替代,因为在您的平台上的 **glibc** 版本太低,或者使用docker版本。
-:::
-
-## What is the extra sign parameter after the file now? { lang="en" }
-
-## 现在文件后面多了个 sign 的参数是干嘛的? { lang="zh-CN" }
+## 现在文件后面多了个 sign 的参数是干嘛的?
-::: en
-Encrypted for account security, you can view the details by [click to view](../configuration/global.md#sign-all)
-:::
-::: zh-CN
加密了为了账号安全一些,查看详情可以[点击查看](../configuration/global.md#签名所有)
-:::
-
-## Prompt when adding Aliyun drive (shared) Prompt Post "https://auth.aliyundrive.com/v2/account/token": net/http: TLS handshake timeout { lang="en" }
-
-## 添加阿里云盘(分享)时提示 提示Post "https://auth.aliyundrive.com/v2/account/token": net/http: TLS handshake timeout { lang="zh-CN" }
-::: en
-Reason: The VPS is located outside mainland China, and IPv6 is enabled
-Workaround:
-**Method 1**: Add the following three items in the vps hosts and restart the network or restart the vps
+## 添加阿里云盘(分享)时提示 提示Post "https://auth.aliyundrive.com/v2/account/token": net/http: TLS handshake timeout
-- 47.94.245.197 api.aliyundrive.com
-
-- 47.94.245.197 auth.aliyundrive.com
-
-- 121.89.3.30 cn-beijing-data.aliyundrive.net
-
-**Method 2**: Turn off and disable IPv6 of vps
-:::
-::: zh-CN
原因:VPS在中国大陆境外,且启用了IPv6
解决方法:
方法一:在vps的hosts中添加以下三条并重启网络或者重启vps
@@ -594,190 +231,75 @@ Workaround:
- 121.89.3.30 cn-beijing-data.aliyundrive.net
方法二:关闭并且禁用vps的IPv6
-:::
-
-## 123 When the cloud disk is mounted, json: cannot unmarshal string into Go struct field TokenResp.data of type struct { Token string "json:\"token\"" } { lang="en" }
-
-## 123云盘挂载时出现 json: cannot unmarshal string into Go struct field TokenResp.data of type struct { Token string "json:\"token\"" } { lang="zh-CN" }
-
-::: en
-
-There is a high probability that your device that builds OpenList is temporarily blocked, frozen, blocked, or restricted. Don't mount it yet, wait a few hours and try again or wait a day
+## 123云盘挂载时出现 json: cannot unmarshal string into Go struct field TokenResp.data of type struct { Token string "json:\"token\"" }
-(Conclusions from the above questions have been tested)
-:::
-::: zh-CN

大概率是你的这台搭建OpenList的设备 暂时被 拉黑,冻结,封禁,限制了。先不要挂载了,等几个小时再试试看或者等一天
(以上问题已经经过测试得出的结论)
-:::
-
-## Why doesn't PikPak have a name { lang="en" }
-## 为何 PikPak 下载文件不显示文件名? { lang="zh-CN" }
+## 为何 PikPak 下载文件不显示文件名?
-::: en
-Because PikPak's server does not set the filename in the `content-disposition` header, this is a PikPak problem and not an OpenList, so it cannot be fixed
-:::
-::: zh-CN
因为 PikPak 的服务器在 content-disposition 头中没有设置文件名,所以这是 PikPak 的问题 而不是 OpenList,故无法解决
-:::
-
-## How to query your own OpenList version number { lang="en" }
-
-## 如何查询自己的OpenList版本号 { lang="zh-CN" }
-::: en
-
-1. Use the command `openlist version`, the console will output
-2. OpenList Manage --> Settings --> Site --> `Version` option
-
-Why is the old version of OpenList still after the update? Generally, docker encounters this problem. You can [**refer to this**](../guide/installation/docker.md#update)
-:::
-::: zh-CN
+## 如何查询自己的OpenList版本号
1. 使用命令 `openlist version`,控制台会输出
2. OpenList后台 --> 设置 --> 站点 --> `版本`选项
为什么更新后还是旧版的OpenList,一般遇到这个问题的都是docker,可以[**参考这个**](../guide/installation/docker.md#更新)
-:::
-
-## OpenList's download "Download" option suddenly blank, no content { lang="en" }
-
-## OpenList的下载"Download"选项突然空白,没有内容 { lang="zh-CN" }
-
-::: en
-Check your plug-ins, whether there are ad blocking plug-ins, for example: **AdGuard** and others
-Through the console, it is found that "**https://g.alicdn.com/IMM/office-js/1.1.5/aliyun-web-office-sdk.min.js**" has been blocked,
+## OpenList的下载"Download"选项突然空白,没有内容
-Maybe other links are blocked, manually add the blocked domain name to the whitelist or close the plug-in, or it may be that the plug-in is convulsed
-
-
-:::
-::: zh-CN
检查你的插件,是否有广告拦截插件,例如:**AdGuard**等其他的
通过控制台发现"**https://g.alicdn.com/IMM/office-js/1.1.5/aliyun-web-office-sdk.min.js**" 被拦截了,
也许拦截了其它链接,手动将被拦截域名添加到白名单或者关闭插件,也可能是插件抽风了

-:::
-## Why do prompts appear after clicking "Login success" and "Guest is disabled, login please" { lang="en" }
+## 为什么在点击登录后同时出现提示 "登录成功" 和 "Guest is disabled, login please"
-## 为什么在点击登录后同时出现提示 "登录成功" 和 "Guest is disabled, login please" { lang="zh-CN" }
-
-::: en
-Please check whether your site is connected to a `CDN`. If so, please remove the CDN cache.
-
-Connecting OpenList to a CDN is not recommended for non-professionals. [See here](https://t.me/OpenListOfficial/23).
-
-:::
-
-::: zh-CN
请检查你的站点是否接入了 `CDN`。如有,请去掉CDN缓存。
不建议非专业人士给OpenList接入CDN。详见[此处](https://t.me/OpenListOfficial/23)。
-:::
-
-## Why has the "Add" button on the sharing management page been disabled? { lang="en" }
+## 为什么分享管理页面的添加按钮被禁用了?
-## 为什么分享管理页面的添加按钮被禁用了? { lang="zh-CN" }
-
-::: en
-Your account does not have "Sharing" permissions.
-
-- If you are an administrator, please go to the User Management interface to enable the required permissions for yourself.
-- If you are a regular user, please contact your administrator to request access.
-
-:::
-
-::: zh-CN
你的账号没有“分享”权限。
- 如果你是管理员,需要在用户管理界面为自己开启相应权限。
- 如果你是普通用户,请联系管理员。
-:::
-
-## Why can't I use a WebDAV client to manage (writing operations) files in OpenList? { lang="en" }
-
-## 为什么我无法使用 WebDAV 客户端管理(特指写入操作) OpenList 中的文件? { lang="zh-CN" }
+## 为什么我无法使用 WebDAV 客户端管理(特指写入操作) OpenList 中的文件?
-::: en
-The reason is the same as the previous one: you need the "WebDAV Manage" permission.
-:::
-
-::: zh-CN
原因与上一条问题相同,你需要“WebDAV管理”权限。
-:::
-
-## Why is my Markdown file preview showing garbled text? { lang="en" }
-
-## Why aren't lists in my Markdown file visible during preview? { lang="en" }
-
-## 为什么预览 Markdown 文件会出现乱码? { lang="zh-CN" }
-
-## 为什么预览时看不到 Markdown 文件中的列表? { lang="zh-CN" }
-::: en
-This phenomenon is mainly observed in Markdown files that include tables or code. As a security measure to prevent the execution of potentially malicious scripts from untrusted sources, the system has XSS protection enabled by default.
+## 为什么预览 Markdown 文件会出现乱码?
-This mechanism can be disabled by navigating to "**Settings / Preview**" and deactivating the "**Filter scripts in README**" option.
+## 为什么预览时看不到 Markdown 文件中的列表?
-Please note that disabling this protective measure will make your device vulnerable to XSS (cross-site scripting) attacks. Users are fully responsible for the security of their own devices.
-:::
-
-::: zh-CN
这一问题主要出现在 Markdown 文件中存在表格或代码的情况,为了防止用户在不知情的情况下点击来源不明的 Markdown 文件,导致其中可能存在的恶意代码被执行,系统默认开启了 XSS 保护。
你可以在“**设置 / 预览**”中关闭“**过滤 README 文件中的脚本**”选项以关闭这一机制。
**关闭这一保护机制后,你的设备可能会遭受到XSS攻击,请为自己的设备安全负责。**
-:::
-
-## Why can't I connect to OpenList via an FTP client even after I've filled in the FTP mount configuration? { lang="en" }
-## 为什么我填写了 FTP 挂载相关配置,但依然无法通过 FTP 客户端连接 OpenList? { lang="zh-CN" }
-
-::: en
-Besides configuring the settings in the admin panel, you must also set `enable` to `true` under the `ftp` section in the configuration file (`config.json`) to activate the FTP connection feature.
-
-Additionally, any changes made in the admin panel require a restart of OpenList to take effect.
-
-If you wish to connect using the SFTP protocol, please enable it by setting `enable` to `true` in the `sftp`(rather than `ftp`) section of the configuration file.
-:::
+## 为什么我填写了 FTP 挂载相关配置,但依然无法通过 FTP 客户端连接 OpenList?
-::: zh-CN
除了填写管理界面中的相关设置外,你还需要将配置文件(`config.json`)中`ftp`子项中的`enable`设置为`true`才能开启 FTP 连接功能。
此外,管理界面中的配置项修改完毕后,需要重新启动 OpenList 才能生效。
如果你需要使用 SFTP 协议连接 OpenList,请打开配置文件(`config.json`)中`sftp`(而不是`ftp`)子项中的`enable`。
-:::
-
-## Why are the filenames in my ZIP file showing up as garbled text/characters when I preview it? { lang="en" }
-
-## 为什么预览 ZIP 压缩文件时,文件名显示为乱码? { lang="zh-CN" }
-
-::: en
-Older versions of the ZIP format do not mandate UTF-8 encoding for filenames, which can lead to decoding problems for non-ASCII characters.
-To resolve this, you can adjust the "**Alternative Encoding for ZIP Files**" setting under "**Settings / Preview**".
+## 为什么预览 ZIP 压缩文件时,文件名显示为乱码?
-For Simplified Chinese users, you can fix this issue by setting this value to "**GBK**" in most cases.
-:::
-
-::: zh-CN
较旧版本的 ZIP 文件并不强制要求文件名采用 UTF-8 编码,此时非 ASCII 字符的解码会出现问题。
你可以在“**设置 / 预览**”中调整“**ZIP 文件备选编码**”配置项的值来规定系统此时采用什么编码来解码文件名。
对于简体中文用户来说,将此项设置为“**GBK**”就可以解决大多数情况下文件名乱码的问题。
-:::
diff --git a/pages/guide/advanced/2fa.md b/pages/guide/advanced/2fa.md
index 9752adbc2..d366e1c56 100644
--- a/pages/guide/advanced/2fa.md
+++ b/pages/guide/advanced/2fa.md
@@ -1,28 +1,14 @@
---
-title:
- en: 2Fa
- zh-CN: 双因素身份验证
categories:
- guide
- advanced
top: 110
---
-## Enable 2FA verification { lang="en" }
+# 双因素身份验证
-## 启用 2FA 验证 { lang="zh-CN" }
+## 启用 2FA 验证
-::: en
-To enable 2-factor authentication, you need to install a app that support 2FA (such as [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2),[Microsoft Authenticator](https://support.microsoft.com/en-us/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a)), on your phone.
-
-Then login to OpenList manage and goto `Profile` page, click `Enable 2FA` button, scan the QR code with your 2FA app, and enter the code generated by your 2FA app.
-
-Finally, click `Verify` button to enable 2FA.
-
-- Each user can set a different "2FA" verification, how to cancel see the method below
-
-:::
-::: zh-CN
要启用双因素身份验证,需要在手机上安装支持 TOTP 的验证器,例如 [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2),[Microsoft Authenticator](https://support.microsoft.com/zh-cn/account-billing/%E4%B8%8B%E8%BD%BD%E5%B9%B6%E5%AE%89%E8%A3%85microsoft-authenticator%E5%BA%94%E7%94%A8-351498fc-850a-45da-b7b6-27e523b8702a)
然后登录 OpenList 管理并进入“个人资料”页面,点击“启用 2FA”按钮,用你的 2FA 应用扫描二维码,输入你的 2FA 应用生成的代码。
@@ -31,48 +17,7 @@ Finally, click `Verify` button to enable 2FA.
- 每个用户都可以设置不同的"2FA"验证,如何解除看下面的方法
-:::
-
-## Cancel 2FA verification { lang="en" }
-
-## 解除 2FA 验证 { lang="zh-CN" }
-
-::: en
-
-**1. Forgot 2FA for a non-Admin account:**
-
-If you’ve forgotten the 2FA for a non-admin account, you can contact an administrator to clear it. The steps are as follows:
-
-- Go to the backend → Select "Users" → Click **"Cancel Two-Factor Authentication"**.
-
-If the 2FA is lost for an admin account, please refer to step 2 for instructions on clearing it.
-
----
-
-**2. How to access the folder where OpenList is located and clear 2FA:**
-
-- **Windows**: Navigate to the folder where OpenList is located and enter the command:
- `openlist.exe cancel2fa`
-
-- **Linux**: Similarly, go to the OpenList folder and enter the command:
- `./openlist cancel2fa`
-
-- **Docker**: In a Docker environment, enter the command:
- `docker exec -it openlist ./openlist cancel2fa`
-
-After running these commands, a restart will apply the changes.
-
----
-
-**3. Actions after canceling 2FA:**
-
-In the "Users" section of the backend, you will find the **"Cancel Two-Factor Authentication"** option. After canceling, if issues persist, try restarting OpenList.
-
-**Note**: If you don’t see the **"Cancel Two-Factor Authentication"** option, please check if you’re using the latest version. If not, please update your version.
-
-:::
-
-::: zh-CN
+## 解除 2FA 验证
**1. 忘记非Admin账号的2FA密码:**
@@ -104,5 +49,3 @@ In the "Users" section of the backend, you will find the **"Cancel Two-Factor Au
进入后台“用户”页面后,您可以看到 **“取消两步验证”** 的选项。取消后,若仍然遇到问题,可以尝试重新启动OpenList。
**注意**:如无法看到 **“取消两步验证”** 选项,请检查是否使用的是最新版本,如不是,请更新版本。
-
-:::
diff --git a/pages/guide/advanced/alias.md b/pages/guide/advanced/alias.md
index 1bebc0339..8a1c5d968 100644
--- a/pages/guide/advanced/alias.md
+++ b/pages/guide/advanced/alias.md
@@ -1,11 +1,10 @@
---
-title:
- en: Alias
- zh-CN: 别名
categories:
- guide
- advanced
top: 120
---
+# 别名
+
diff --git a/pages/guide/advanced/backup.md b/pages/guide/advanced/backup.md
index 9564dd34d..3d66ba1c9 100644
--- a/pages/guide/advanced/backup.md
+++ b/pages/guide/advanced/backup.md
@@ -1,29 +1,14 @@
---
-title:
- en: Backup&Restore
- zh-CN: 备份&恢复
categories:
- guide
- advanced
top: 20
---
-## Method 1-Built-in { lang="en" }
+# 备份&恢复
-## 方法1-内置 { lang="zh-CN" }
+## 方法1-内置
-::: en
-Use `OpenList` to manage `Backup/Restore` options
-
-1. Backup: Backup OpenList data (**does not include index**)
-2. Recovery: Backup files before recovery
-3. Override: Select override when recovery, and will override the user information
-4. Encryption Password:Fill in the `ENCRYPTION PASSWORD` Export, the information will be encrypted when exporting.You also need to enter the `ENCRYPTION PASSWORD` first before importing.
-
- 
-
-:::
-::: zh-CN
使用`OpenList`后台的内置 `备份/恢复`选项
1. 备份:进行 OpenList 数据进行备份(**不包含索引**)
@@ -33,23 +18,8 @@ Use `OpenList` to manage `Backup/Restore` options

-:::
-
-## Method 2-Sqlite3 { lang="en" }
-
-## 方法2-Sqlite3 { lang="zh-CN" }
-
-::: en
-Back up the `data/data.db` database in the `OpenList` directory, and wait for the new environment to replace it directly (**contains index data**)
+## 方法2-Sqlite3
-- If there are two files, if there are `data.db-shm` and `data.db-wal`, they must be backup together.
-- It is recommended to stop running OpenList and then backup, so that the two files of `data.db-shm` and`data.db-wal` will be merged with the `data.db`
-
- 
-
-:::
-
-::: zh-CN
直接将`OpenList`目录下的 data/`data.db`数据库进行备份,等到了新环境直接进行替换即可(**包含索引数据**)
- 现在高版本如果有`data.db-shm`和`data.db-wal`这两个文件也要一起进行备份,恢复时也是一起替换
@@ -57,15 +27,6 @@ Back up the `data/data.db` database in the `OpenList` directory, and wait for th

-:::
-
-## Method 3-Other database { lang="en" }
-
-## 方法3-其他数据库 { lang="zh-CN" }
+## 方法3-其他数据库
-::: en
-Other, if you use `mysql, postgres` and other non `sqlite database`, please solve it by yourself (**include indexing data**)
-:::
-::: zh-CN
其他,如果你使用了 `MySQL,Postgres` 等非`sqlite数据库`,请自行解决(**包含索引数据**)
-:::
diff --git a/pages/guide/advanced/balance.md b/pages/guide/advanced/balance.md
index 2377b1e73..0a8872c95 100644
--- a/pages/guide/advanced/balance.md
+++ b/pages/guide/advanced/balance.md
@@ -1,44 +1,14 @@
---
-title:
- en: Load balancing
- zh-CN: 负载均衡
categories:
- guide
- advanced
top: 90
---
-## Link load balancing { lang="en" }
+# 负载均衡
-## 链路负载均衡 { lang="zh-CN" }
+## 链路负载均衡
-::: en
-Link load balancing distributes traffic across multiple links to alleviate bandwidth pressure on any single link. This load balancing mechanism is only applicable when traffic arrives at the same storage service via multiple distinct links. The system assumes that the drivers participating in the load balancing can always automatically maintain content consistency and will simply forward all requests in a round-robin manner:
-
-```mermaid
-graph LR
- User -->|RW file1| OpenList
- OpenList -->|Write file1| Link1
- OpenList -->|Read file1| Link2
- Link1 -->|Write file1| Serv[Storage Service]
- Link2 -->|Read file1| Serv[Storage Service]
-```
-
-To perform this load balancing mechanism, mount the first driver normally, and then add the remaining load-balancing drivers using a mount path formatted as `first storage mount path + .balance + any additional content`.
-
-E.g:
-
-- Storage 1: `test`
-- Storage 2: `test.balance1`
-- Storage 3: `test.balance2`
-- Storage 4: `test.balance3`
-- ...
-- Storage n: `test.balancen`
-
-
-The first is marked with a red box. It is the main mount, which is displayed on the front page. The remaining nine are the first load balancing on the first one.
-:::
-::: zh-CN
链路负载均衡用于在多条链路上分担流量,以减轻单条链路的带宽压力。这种负载均衡机制仅用于流量从多条不同的链路抵达同一个存储服务的情况,系统将假定参与负载均衡的驱动总能自动保持内容一致,并简单地轮询转发所有请求:
```mermaid
@@ -63,43 +33,9 @@ graph LR

第一个带红框标记的为主挂载,也就是在前端页面显示的,后面剩下的九个就是对第一个进行负载均衡。
-:::
-
-## Storage load balancing { lang="en" }
-## 存储负载均衡 { lang="zh-CN" }
-
-::: en
-Storage Load Balancing is used to distribute storage occupancy across multiple storage services, achieving the effect of abstracting multiple storage spaces into one large storage space with a capacity equal to the sum of all individual spaces (similar to RAID 0). The system will assign each uploaded file to a random storage service and forward all read and modification requests for that file to that specific service:
-
-```mermaid
-graph LR
- User -->|Requests| OpenList
- OpenList -->|Write file1| Serv1[Storage Service 1]
- OpenList -->|Write file2| Serv2[Storage Service 2]
- OpenList -->|Read file1| Serv1
- OpenList -->|Rename file1| Serv1
- OpenList -->|Read file2| Serv2
-```
-
-This type of load balancing can be implemented using the putting load balancing feature of the [Alias](/guide/drivers/alias) driver, with the following configuration:
-
-- **Reading conflict policy**: **Get the file corresponding to the first conflict path** (The load balancing function of the Rading conflict policy is used to implement the load balancing described in the [Multi-source reading load balancing](/guide/advanced/balance#multi-source-reading-load-balancing) section. Based on the principles of the two load balancing schemes, enabling both simultaneously does not achieve a 1+1>=2 effect).
-- **Writing conflict policy**: Choose either **Allow full conflict paths** or **Write into all conflict paths** (If the **Write into the first conflict path** policy is used, folder creation operations will only be forwarded to one driver. This will cause that folder and its descendant folders to be unable to continue load balancing as they won't exist on other drivers).
-- **Putting conflict policy**: Choose one of **Random load balancing**, **Weighted random load balancing based on remaining space**, or **Strict weighted random load balancing based on remaining space** according to your needs.
-
-The effect achieved with the above configuration:
-
-```mermaid
-graph LR
- OpenList -->|File1,File2,File3| Alias
- Alias -->|File3| Driver1[Driver 1]
- Alias -->|File1| Driver2[Driver 2]
- Alias -->|File2| Driver3[Driver 3]
-```
+## 存储负载均衡
-:::
-::: zh-CN
存储负载均衡用于在多个存储服务上分担空间占用,实现多个存储空间抽象为一个容量为所有存储空间之和的大存储空间的效果(类似于 RAID 0),系统将为每个上传的文件分配一个随机的存储服务,并将对于该文件的读取和修改请求全部转发到这个存储服务上:
```mermaid
@@ -128,31 +64,8 @@ graph LR
Alias -->|文件2| Driver3[驱动3]
```
-:::
-
-#### Load balancing by file chunks { lang="en" }
-
-#### 按文件块负载均衡 { lang="zh-CN" }
-
-::: en
-Sometimes, the files that need to be load-balanced across storage are relatively large, and performing load balancing on a per-file basis is not granular enough. You can use the [Chunk](/guide/drivers/chunk) driver to split files into fixed-size blocks and then apply storage load balancing to these blocks. The specific configuration is as follows:
-
-- **Chunk**: In the remote path, fill in the mount path of the **Alias** driver. Configure other settings as needed.
-- **Alias**: Keep the configuration consistent with the description above.
-
-The achieved effect is:
-
-```mermaid
-graph LR
- OpenList -->|A Large File| Chunk
- Chunk -->|Block1, Block2, Block3| Alias
- Alias -->|Block1| Driver1[Driver 1]
- Alias -->|Block3| Driver2[Driver 2]
- Alias -->|Block2| Driver3[Driver 3]
-```
+#### 按文件块负载均衡
-:::
-::: zh-CN
有时需要被负载均衡存储的文件比较大,以文件为单位进行负载均衡颗粒度不够细,可以使用[分块](/guide/drivers/chunk)驱动将文件划分为固定大小的文件块,再对文件块进行存储负载均衡,具体配置如下:
- 分块:远程路径填写**别名**驱动的挂载路径,其它配置项按需填写。
@@ -169,34 +82,8 @@ graph LR
Alias -->|文件块2| Driver3[驱动3]
```
-:::
+## 多源读取负载均衡
-## Multi-source reading load balancing { lang="en" }
-
-## 多源读取负载均衡 { lang="zh-CN" }
-
-::: en
-Multi-source reading load balancing allows copies of a file to be distributed across several different storage services. When a user accesses the file, the system randomly selects one of the copies to return, thereby reducing the uplink bandwidth pressure on any single storage service (similar to RAID 1). The key difference between this load balancing strategy and [Link load balancing](/guide/advanced/balance#link-load-balancing) is that since the load-balanced storage services are treated as multiple, independent file systems with no automatic synchronization, OpenList will forward write operations to **all** storage services, rather than to just one of them:
-
-```mermaid
-graph LR
- User -->|RW file1,file2| OpenList
- OpenList -->|Write file1| Serv1[Storage Service 1]
- OpenList -->|Write file2| Serv1
- OpenList -->|Write file1| Serv2[Storage Service 2]
- OpenList -->|Write file2| Serv2
- OpenList -->|Read file1| Serv1
- OpenList -->|Read file2| Serv2
-```
-
-This type of load balancing can be implemented using the reading load balancing feature of the [Alias](/guide/drivers/alias) driver, with the following configuration:
-
-- **Reading conflict policy**: Choose either **Load balancing on a per-file basis** or **Load balancing on a per-part basis**.
-- **Writing conflict policy**: Choose either **Allow full conflict paths** or **Write into all conflict paths** (If the **Write into the first conflict path** policy is used, folder creation operations will be forwarded to only one driver. This will prevent that folder and its descendant folders from continuing to participate in load balancing, as they won't exist on other drivers).
-- **Putting conflict policy**: Choose either **Allow full conflict paths** or **Put into all conflict paths** (The load balancing function of the Putting conflict policy is used to implement the load balancing described in the [Storage Load Balancing](/guide/advanced/balance#storage-load-balancing) section. Based on the principles of the two load balancing schemes, enabling both simultaneously does not achieve a 1+1>=2 effect).
-
-:::
-::: zh-CN
多源读取负载均衡可以将文件的副本分散在若干不同的存储服务上,当用户访问文件时,系统会随机选择其中一个文件返回,从而降低单个存储服务的上行带宽压力(类似于 RAID 1)。这种负载均衡策略与[链路负载均衡](/guide/advanced/balance#链路负载均衡)的最大不同之处在于,由于负载均衡存储服务被视为多个没有关联,无法自动同步的文件系统,OpenList 将会向**所有**存储服务转发写入操作,而不是向其中一个转发:
```mermaid
@@ -215,5 +102,3 @@ graph LR
- 读取冲突策略:**按文件负载均衡**和**按分片负载均衡**二选一。
- 写入冲突策略:**仅允许全冲突路径**和**写入所有有效路径**二选一(如果使用**写入首个有效路径**策略,创建文件夹操作将会仅被转发到一个驱动上,这将导致该文件夹及其子孙文件夹由于不存在于其它驱动上,而无法继续负载均衡)。
- 上传冲突策略:**仅允许全冲突路径**和**上传到所有有效路径**二选一(上传冲突策略的负载均衡功能用于实现[存储负载均衡](/guide/advanced/balance#存储负载均衡)章节的负载均衡功能,按照两种负载均衡方案的原理,同时开启两种负载均衡功能并不能实现1+1>=2的效果)。
-
-:::
diff --git a/pages/guide/advanced/ftp.md b/pages/guide/advanced/ftp.md
index f50b71dea..f30fbe8a7 100644
--- a/pages/guide/advanced/ftp.md
+++ b/pages/guide/advanced/ftp.md
@@ -1,22 +1,12 @@
---
-title:
- en: FTP / SFTP
- zh-CN: FTP / SFTP
categories:
- guide
- advanced
top: 30
---
-::: en
-::: tip
-Any adjustments made to FTP-related configurations on the web management page must restart OpenList to take effect.
-
-When using FTP for downloading, only the local proxy will be used.
-
-:::
+# FTP / SFTP
-::: zh-CN
::: tip
所有在网页端管理页面对 FTP 相关配置进行的调整必须重启 OpenList 才会生效。
@@ -24,28 +14,7 @@ When using FTP for downloading, only the local proxy will be used.
:::
-## FTP Configurations { lang="en" }
-
-## FTP 配置文件 { lang="zh-CN" }
-
-::: en
-
-| Field | Meaning | Example Value |
-| --------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------- |
-| enable | Whether to enable | `true` / `false` |
-| listen | (Allowed access IP mask): port | `":5221"` (default) / `"0.0.0.0:21"` / `"127.0.0.1:2121"` |
-| find_pasv_port_attempts | Maximum attempts to find a port due to port conflict in passive transfer | `50` |
-| active_transfer_port_non_20 | Enable ports other than 20 for active transfer ports | `true` / `false` |
-| idle_timeout | Maximum idle time (in seconds) without client requests | `900` |
-| connection_timeout | Connection timeout time | `30` |
-| disable_active_mode | Disable active transfer mode | `true` / `false` |
-| default_transfer_binary | Default transfer in binary mode | `true` / `false` |
-| enable_active_conn_ip_check | Check the IP of the client for data stream TCP connection in active transfer mode | `true` / `false` |
-| enable_pasv_conn_ip_check | Check the IP of the client for data stream TCP connection in passive transfer mode | `true` / `false` |
-
-:::
-
-::: zh-CN
+## FTP 配置文件
| 字段 | 含义 | 示例值 |
| --------------------------- | ------------------------------------------------ | ------------------------------------------------------- |
@@ -60,39 +29,12 @@ When using FTP for downloading, only the local proxy will be used.
| enable_active_conn_ip_check | 主动传输模式下对数据流TCP连接的客户端进行IP检查 | `true` / `false` |
| enable_pasv_conn_ip_check | 被动传输模式下对数据流TCP连接的客户端进行IP检查 | `true` / `false` |
-:::
-
-## FTP Settings { lang="en" }
-
-## FTP 设置 { lang="zh-CN" }
+## FTP 设置
-::: en
-Before understanding the FTP configuration options, it is important to first understand how the FTP protocol works. The FTP protocol uses **two TCP connections** for communication, which are referred to as the "**control flow**" and the "**data flow**." Port 21 is the default control flow port for the FTP protocol. The FTP server continuously listens on this port, waiting for connections from clients and responding accordingly. **The control flow only transmits client requests and server error messages, without transferring file contents or file listings.** In OpenList, the control flow port is determined by the `listen` parameter in the configuration file, with a default value of 5221. The client must be able to access this port on the server for the protocol to function properly.
-
-The establishment of the data flow can be done in two main ways, known as "active mode" and "passive mode":
-:::
-
-::: zh-CN
在了解 FTP 的设置选项前需要先了解 FTP 协议的工作方式,FTP 协议使用**两个 TCP 连接**进行交互,它们分别被称为“**控制流**”和“**数据流**”,21 号端口是 FTP 协议的默认控制流端口号,FTP 服务器会持续监听这一端口号等待客户端的连接并给出响应,**控制流只传输客户端的请求指令和服务端的错误信息,不传输文件内容和文件列表**。在 OpenList 中,控制流端口号由配置文件内的`listen`参数确定,默认为 5221,客户端必须能够访问服务端的这一端口,协议才可以正常工作。
而数据流的建立主要有两种方式,被称为“主动模式”和“被动模式”:
-:::
-
-::: en
-In active mode, the client actively listens on a port and sends the port number to the server using the `PORT` command. The server then actively connects to the client and transmits files or a list of files. In this mode, the client must be directly accessible by the server. Therefore, in the context of widespread NAT, this mode generally only works when both the server and client are in the same subnet.
-
-```mermaid
----
-title: Active Mode
----
-sequenceDiagram
- Client->>Server: Sends PORT command with client's IP address and data port number
- Server->>Client: Actively connects to the client and transmits files or file list over the newly established connection (data stream)
-```
-
-:::
-::: zh-CN
在主动模式下,客户端主动监听一个端口,并通过`PORT`指令将端口号发送给服务端,服务端主动连接客户端并传输文件或文件列表。在这种模式下,客户端需要能够被服务端直接访问,因此在当前 NAT 普及的情况下几乎只有服务端和客户端处在同一子网内时才能发挥作用。
```mermaid
@@ -104,25 +46,6 @@ sequenceDiagram
服务端->>客户端: 主动连接客户端,在新建立的连接(数据流)中传输文件或文件列表
```
-:::
-
-::: en
-
-In passive mode, the client first sends the `PASV` or `EPSV` command in the control stream, requesting the server to listen on a new data port. The server then returns the port number of the new listening port to the client in the control stream. After the client establishes a connection with that port, data transfer begins. In this mode, the server does not actively initiate connections to the client, so it only needs to be outside of NAT. However, since the passive transfer port is not predetermined but determined before the connection is initiated, additional configuration is required when there are port mappings between the server and the client, or when only a subset of the server's ports are available for client connections in complex network environments.
-
-```mermaid
----
-title: Passive Mode
----
-sequenceDiagram
- Client->>Server: Sends PASV or EPSV command in control stream
- Server-->>Client: Server's public IP (only PASV) and passive transfer port number for data transfer
- Client->>Server: Initiates TCP connection to the server's IP and port, then transfers files or file list over the newly established connection (data stream)
-```
-
-:::
-
-::: zh-CN
在被动模式下,客户端首先在控制流中发送`PASV`或`EPSV`命令,要求服务端新监听一个数据流端口,服务端在控制流中向客户端返回新监听的端口的端口号,待客户端与该端口建立连接以后再进行数据传输。在这种模式下,服务端不主动向客户端发起连接,因此只需要服务端处在 NAT 之外即可,但因为被动传输的传输端口不是预先确定,而是在连接发起前才确定的,因此在面对服务端和客户端之间存在端口映射,或服务端仅有一部分端口允许客户端连接的复杂网络环境时就需要额外配置。
```mermaid
@@ -135,22 +58,6 @@ sequenceDiagram
客户端->>服务端: 向服务端返回的IP和端口发起TCP连接,在新建立的连接(数据流)中传输文件或文件列表
```
-:::
-
-::: en
-
-- FTP Server Public Network Address
-
- This is the IP address that the server sends to the client in the `PASV` command. If the server and the client are within the same subnet, the server's internal IP address can be used. Even if the server and the client are on the same machine, `127.0.0.1` can be used. However, if the server and client are not in the same subnet, the server's IP address that is accessible by the client must be specified.
-
- A domain name can also be specified. In this case, the default DNS will resolve the domain name to an IP address. However, since `PASV` only supports IPv4 addresses, if both an AAAA (IPv6) and an A (IPv4) record exist for the domain, the A record will be used. If only an AAAA record exists without an A record, the result is unknown.
-
- This field does not affect the `EPSV` command, but leaving this field invalid will cause the FTP server to fail to start. Therefore, if your FTP client only uses the `EPSV` command, you may consider keeping the default value `127.0.0.1`.
-
-:::
-
-::: zh-CN
-
- FTP 服务端公网地址
在`PASV`命令中服务端向客户端发送的 IP 地址,如果服务端和客户端在同一子网内,用服务端的内网 IP 地址也可以,甚至如果服务端和客户端是同一台主机,也可以使用`127.0.0.1`。但如果服务端和客户端不在同一子网内,则需要填写能够让客户端访问到的服务端 IP 地址。
@@ -159,71 +66,6 @@ sequenceDiagram
该字段不影响`EPSV`指令,但该字段无效会导致 FTP 服务器放弃启动,所以如果你的 FTP 客户端只使用 `EPSV`指令,可以考虑这里保留默认值`127.0.0.1`。
-:::
-
-::: en
-
-- FTP Passive Transfer Port Mapping
-
- This field consists of a series of "mapping groups" separated by commas (`,`) or newlines. The legal forms for a "mapping group" are as follows:
- 1. ``
- 2. `-`
- 3. `:`
- 4. `-::`
-
- All port numbers must be between 1024 and 65535 (inclusive), and the starting port number of a range must be less than the ending port number.
-
- For cases where this field is left blank, the server will choose any port between 1024 and 65535 for passive transfer and will not perform any mapping.
- - Each "mapping group type 1" specifies a single port to be used for passive transfer, and no mapping will be performed for that port.
- - Each "mapping group type 2" specifies a range of ports, and all ports in that range will be used for passive transfer without any mapping.
- - Each "mapping group type 3" specifies a listening port to be used for passive transfer, and when the server selects this port, it will return the "response port number" to the client.
- - "Mapping group type 4" requires that the two ranges before and after the colon `:` have equal lengths. Each "mapping group type 4" forms a one-to-one pairing of port numbers, where each pair is treated as a "mapping group type 3."
-
- The following are legal formats:
- - `1024`
- - `4001-5000,5001-6000:50001-510004000:65535`
-
- The following are illegal formats:
- - `1023` (less than 1024)
- - `65536` (greater than 65535)
- - `4000, 5000` (space after the comma)
- - `2000 - 3000 : 4000 - 5000` (spaces are illegal)
- - `2000-2001:3000-3002` (unequal length of ranges)
-
- If the field is invalid, the server will choose any port between 1024 and 65535 for passive transfer without performing any mapping.
-
- The design of port mapping is intended to address the complexity of external port mapping. For example, if the server is running inside a Docker container and uses port 2000 for passive transfer, but Docker maps port 2000 inside the container to port 12000 on the host machine, you can achieve this mapping using the configuration `12000:2000`.
-
-```mermaid
-sequenceDiagram
- participant Client
- participant Port Mapping
- participant Server
- Client->>Server: Send EPSV command
- Server-->>Client: Return 12000
- Client->>Port Mapping: Connect to port 12000
- Port Mapping->>Server: Forward to port 2000
-```
-
-If there are multiple layers of port mapping between the server and the client, only the port number closest to the client needs to be specified before the `:` symbol, and only the port number closest to the server needs to be specified after the `:` symbol. For example, in the following scenario, you can fill in `2000:5000`:
-
-```mermaid
-sequenceDiagram
- participant Client
- participant NAT Traversal Service
- participant Soft Router Port Forwarding
- participant Docker Container Port Mapping
- participant OpenList Process
- Client->>NAT Traversal Service: 2000
- NAT Traversal Service->>Soft Router Port Forwarding: 3000
- Soft Router Port Forwarding->>Docker Container Port Mapping: 4000
- Docker Container Port Mapping->>OpenList Process: 5000
-```
-
-:::
-
-::: zh-CN
-
- FTP 被动传输端口映射
该字段由一系列以英文逗号`,`或换行符隔开的“映射组”构成,“映射组”的合法形式有以下四种:
@@ -284,46 +126,6 @@ sequenceDiagram
Docker 容器端口映射->>OpenList 进程: 5000
```
-:::
-
-::: en
-
-- FTP Proxy User-Agent Request Header
-
- Some storage drivers require a User-Agent request header when accessing the FTP server. You can simply use any fake value for this header.
-
-- Force FTP Connection to Use Explicit TLS
-
- Forces the use of the FTPS protocol, which only encrypts the data stream and not the control stream.
- If the "Enable FTP Implicit TLS" option is enabled, this option will be ignored.
-
- If no valid TLS private key and certificate are provided, and this option is not enabled, the server will only accept the FTP protocol.
-
- If valid TLS private key and certificate are provided, but this option is not enabled, the server will accept both the FTP and FTPS protocols.
-
- If no valid TLS private key and certificate are provided, but this option is enabled, the FTP server will fail to start.
-
-- Enable FTP Implicit TLS
-
- Uses the FTPS protocol, which encrypts both the data stream and the control stream. This makes it incompatible with FTP and FTPS (explicit) protocols.
-
- When this option is enabled, the "Force FTP Connection to Use Explicit TLS" option will be ignored.
- If no valid TLS private key and certificate are provided but this option is enabled, the FTP server will fail to start.
-
-- FTP TLS Private Key Path
-
- The path to the TLS private key file. Leaving it empty or providing an invalid path means TLS will not be enabled.
-
- Enabling TLS may require the client to access the server using a domain name, though the "FTP Server Public Address" can still be an IP address.
-
-- FTP TLS Certificate Path
-
- The path to the TLS certificate file. Leaving it empty or providing an invalid path means TLS will not be enabled.
-
-:::
-
-::: zh-CN
-
- FTP 代理 User-Agent 请求头
某些存储驱动在访问时需要用到 User-Agent 请求头,随便写一个假的就行。
@@ -358,26 +160,9 @@ sequenceDiagram
TLS 证书文件路径,留空或无效表示不启用 TLS。
-:::
-
-## SFTP Configurations { lang="en" }
-
-## SFTP 配置文件\* { lang="zh-CN" }
-
-::: en
-
-| Field | Meaning | Example Value |
-| ------ | ------------------------------ | --------------------------------------------------------- |
-| enable | Whether enabled | `true` / `false` |
-| listen | (Allowed access IP mask)\:port | `":5222"` (default) / `"0.0.0.0:22"` / `"127.0.0.1:2222"` |
-
-:::
-
-::: zh-CN
+## SFTP 配置文件\*
| 字段 | 含义 | 示例值 |
| ------ | ----------------------- | ------------------------------------------------------- |
| enable | 是否启用 | `true` / `false` |
| listen | (允许访问的IP掩码):端口 | `":5222"`(默认) / `"0.0.0.0:22"` / `"127.0.0.1:2222"` |
-
-:::
diff --git a/pages/guide/advanced/ipa.md b/pages/guide/advanced/ipa.md
index cfc30b3ec..bb8a44b6f 100644
--- a/pages/guide/advanced/ipa.md
+++ b/pages/guide/advanced/ipa.md
@@ -1,28 +1,14 @@
---
-title:
- en: IPA install
- zh-CN: IPA 安装
categories:
- guide
- advanced
top: 70
---
-## 1. IPA native installation { lang="en" }
+# IPA 安装
-## 1. IPA原生安装 { lang="zh-CN" }
+## 1. IPA原生安装
-::: en
-You can directly upload the ipa file.
-But for **ios>=16**, you need to name the ipa file: `original file name@bundle-identifier.ipa`, that is, you need to add `@bundle-identifier` on the original basis, in which `bundle-identifier` is the `CFBundleIdentifier` of Info.plist in the IPA package. Such as:
-
-- aszs@rn.notes.best.ipa
- Recommended to use [ipa-renamer](https://github.com/Xhofe/ipa-renamer) to rename your ipa files automatically and quickly.
-- If you are a mobile phone user, you can also rename the IPA file, but you must know the format mentioned above, but there is no mobile phone renaming software, please solve it yourself...
-
-:::
-
-::: zh-CN
直接上传 ipa 文件即可。
但是对于 **iOS 16 以上的** 设备,你需要将 ipa 文件命名为:`原文件名@bundle-identifier.ipa`,即需要在原来的基础上加入`@bundle-identifier`,其中的 `bundle-identifier` 即 IPA 包中 `Info.plist` 的 `CFBundleIdentifier`。如:
@@ -30,31 +16,7 @@ But for **ios>=16**, you need to name the ipa file: `original file name@bundle-i
推荐你使用 [ipa-renamer](https://github.com/Xhofe/ipa-renamer) 自动快速地重命名你的 IPA 文件。
- 如果你是手机用户也可以给IPA文件改名,但是你要会上述提到的格式才行,但是不提供手机改名软件请你自己解决...
-:::
-
-### Tips { lang="en" }
-
-### Tips { lang="zh-CN" }
-
-::: en
-
-- **.ipa installation requires https and a valid certificate** , not just a package can be installed without a signature
- - How to change the name of the computer version
-
-
-
- - How to change the name of the IOS 16 mobile phone
-
-
-
-**Installation Demo**: Deploy **HTTPS** and **IPA files** are signed prerequisites, if **IOS16 rename by yourself** If you can’t install it yourself, please check the problem yourself
-
-- **Installation demo environment**: IOS15.4.1 iPhone12PM, personal certificate, HTTPS
-
-
-
-:::
-::: zh-CN
+### Tips
- **.ipa安装 需要 https 和 有效的证书**,不是随便一个包上传上去没签名就能安装的
- 爱思助手签名的无法使用在线安装,只能使用爱思助手安装(经群友测试)
@@ -72,42 +34,7 @@ But for **ios>=16**, you need to name the ipa file: `original file name@bundle-i
-:::
-
-## 2. TrollStore install { lang="en" }
-
-## 2. TrollStore(巨魔)安装 { lang="zh-CN" }
-
-::: en
-**Requires OpenList version ≥ 3.12.2 and above**,Devices that support the installation of TrollStore (jailbroken devices are not explained here)
-
-For more devices, please see the table below. The content of the chart comes from [**TrollStore**](https://github.com/opa334/TrollStore)
-
-Chart information update is uncertain, you can go to view https://ios.cfw.guide/installing-trollstore
-
-| From | To | **arm64 (A8)** | arm64 (A9-A11) | arm64e (A12-A17/M1-M2) |
-| :--------------------: | :--------------------: | :--------------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :----------------------------------------------------------------------------: |
-| 14.0 beta 1and earlier | 14.0 beta 1and earlier | Unsupported | Unsupported | Unsupported |
-| 14.0 beta 2 | 14.8.1 | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 15.0 | 15.5 beta 4 | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 15.5 | 15.5 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 15.6 beta 1 | 15.6 beta 3 | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 15.6 beta 4 | 15.6.1 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 15.7 | 15.7.1 | [TrollInstallerMDC](https://ios.cfw.guide/installing-trollstore-trollinstallermdc) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
-| 15.7.2 | 15.8.2 | [TrollMisaka](https://ios.cfw.guide/installing-trollstore-trollmisaka) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
-| 16.0 beta 1 | 16.0 beta 3 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollHelperOTA](https://ios.cfw.guide/installing-trollstore-trollhelperota) |
-| 16.0 beta 4 | 16.6.1 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) |
-| 16.7 RC | 16.7 RC | Not Applicable | [TrollHelper](https://ios.cfw.guide/installing-trollstore-trollhelper) | **Coming Soon** |
-| 16.7 | 16.7.8 | Not Applicable | Unsupported | Unsupported |
-| 17.0 beta 1 | 17.0 beta 4 | Not Applicable | [TrollInstallerX](https://ios.cfw.guide/installing-trollstore-trollinstallerx) | **Coming Soon** |
-| 17.0 beta 5 | 17.0 | Not Applicable | [TrollHelper](https://ios.cfw.guide/installing-trollstore-trollhelper) | **Coming Soon** |
-| 17.0.1 and later | 17.0.1 and later | Not Applicable | Unsupported | Unsupported |
-
- IPA Resources :gift:
-
-:::
-
-::: zh-CN
+## 2. TrollStore(巨魔)安装
**需要OpenList版本 ≥ 3.12.2 及以上**,支持安装TrollStore(巨魔)的设备(不含越狱设备)
@@ -135,63 +62,13 @@ Chart information update is uncertain, you can go to view IPA Resources :gift:
-:::
-
-### Installation example { lang="en" }
-
-### 安装示例 { lang="zh-CN" }
-
-::: en
-
-If you want to use the installation is very simple, click the **TrollStore** button to install.
-
-
-
-:::
-::: zh-CN
+### 安装示例
如果你要使用安装很简单,点击 **TrollStore(巨魔)** 按钮即可安装。

-:::
-
-### Other instructions { lang="en" }
-
-### 其他说明 { lang="zh-CN" }
-
-::: en
-
-1. If you click the **TrollStore** button to open Apple's magnifying glass, it is because of the following reasons
- - Your `TrollStore` version number is less than version 1.3+, it is recommended to update to the latest version directly
- - Your URL scheme is not enabled. If you enable it, remember to click the first option to log out immediately **(Rebuild Now)**
- - 
-2. What is the wake-up format of the TrollStore URL?
- > `apple-magnifier://install?url=`
-3. Is there any benefit to this installation?
- - See the flow chart below for explanation
-
-```mermaid
----
-title: Is there any benefit to this installation?
----
-flowchart TB
- A-->B
- subgraph A[original process]
- C[First download the application from OpenList]-->D[find the downloaded software]
- D-->E[click on the software and select share in the upper right corner]
- E-->F[find the troll icon]
- F-->G[jump into the troll software to install]
- G-->H[install and delete the software]
- end
- subgraph B[troll process]
- I[Click the OpenList troll install button and click the pop-up window prompt]-->J[enter the troll app and wait for download]
- J-->K[after downloading, click the install button]
- end
-```
-
-:::
-::: zh-CN
+### 其他说明
1. 如果你点击 **TrollStore(巨魔)** 按钮后打开的是 Apple的放大镜是因为如下原因
- 你的 `TrollStore` 版本号小于1.3+版本,建议直接更新到最新版
@@ -223,5 +100,3 @@ flowchart TB
G==>J
H===|使用巨魔不用手动删除|K
```
-
-:::
diff --git a/pages/guide/advanced/mcp.md b/pages/guide/advanced/mcp.md
index 7e3850c31..453ac66b7 100644
--- a/pages/guide/advanced/mcp.md
+++ b/pages/guide/advanced/mcp.md
@@ -1,25 +1,12 @@
---
-title:
- en: MCP
- zh-CN: MCP
categories:
- guide
- advanced
top: 20
---
-::: en
-[MCP (Model Context Protocol)](https://modelcontextprotocol.io) is an open protocol that standardizes how applications provide context and tools to Large Language Models (LLMs). OpenList implements MCP as a **Streamable HTTP** transport endpoint, enabling AI agents and MCP clients to interact with file storage.
+# MCP
-With the OpenList MCP endpoint, you can:
-
-- List files and directories
-- Get file or directory details
-- Obtain download links
-
-:::
-
-::: zh-CN
[MCP (Model Context Protocol)](https://modelcontextprotocol.io) 是一种开放协议,它标准化了应用程序向大型语言模型(LLM)提供上下文和工具的方式。OpenList 将 MCP 作为 **Streamable HTTP** 传输端点实现,使 AI 智能体和 MCP 客户端能够与文件存储进行交互。
通过 OpenList MCP 端点,您可以:
@@ -28,29 +15,7 @@ With the OpenList MCP endpoint, you can:
- 获取文件或目录详情
- 获取下载链接
-:::
-
-## How to Enable { lang="en" }
-
-## 如何启用 { lang="zh-CN" }
-
-::: en
-
-1. Open the [Configuration File](../../configuration/configuration.md#mcp)
-2. Set `mcp.enable` to `true`:
-
-```json{2}
- "mcp": {
- "enable": true
- }
-```
-
-3. Restart OpenList for the change to take effect
-4. The MCP endpoint is now available at `http[s]://your-domain:port/mcp`
-
-:::
-
-::: zh-CN
+## 如何启用
1. 打开 [配置文件](../../configuration/configuration.md#mcp)
2. 将 `mcp.enable` 设置为 `true`:
@@ -64,32 +29,8 @@ With the OpenList MCP endpoint, you can:
3. 重启 OpenList 使配置生效
4. MCP 端点现在可以通过 `http[s]://your-domain:port/mcp` 访问
-:::
-
-## MCP Client Configuration { lang="en" }
-
-## MCP 客户端配置 { lang="zh-CN" }
-
-::: en
-To connect an MCP client (such as an AI coding agent that supports MCP) to OpenList, use the following configuration:
-
-**Transport type**: Streamable HTTP
-
-**URL**: `http[s]://your-domain:port/mcp`
-
-**Authentication**: Token Authentication. The token is your OpenList login token — include it directly in the `Authorization` header of each request (e.g. `Authorization: `). Do **NOT** add a `Bearer` prefix. Obtain the token from your OpenList account settings page or via the API.
-
-::: warning
-OpenList's authentication middleware reads the `Authorization` header value as-is. Adding a `Bearer ` prefix will result in authentication failure. Use `Authorization: ` only.
-:::
-
-::: en
-**Protocol version**: `2025-11-25` (also compatible with `2025-06-18`)
+## MCP 客户端配置
-**Session handling**: A session is created on `initialize` and identified via the `MCP-Session-Id` response header. You must include this header in subsequent requests.
-:::
-
-::: zh-CN
要将 MCP 客户端(例如支持 MCP 的 AI 编码助手)连接到 OpenList,请使用以下配置:
**传输类型**:Streamable HTTP
@@ -102,36 +43,14 @@ OpenList's authentication middleware reads the `Authorization` header value as-i
OpenList 的认证中间件直接对比 `Authorization` 头的原始值。如果添加 `Bearer ` 前缀会导致认证失败,请仅使用 `Authorization: `。
:::
-::: zh-CN
-
**协议版本**:`2025-11-25`(同时兼容 `2025-06-18`)
**会话管理**:在 `initialize` 时创建会话,并通过 `MCP-Session-Id` 响应头标识。后续请求必须包含此标头。
-:::
-## Available Tools { lang="en" }
-
-## 可用工具 { lang="zh-CN" }
+## 可用工具
### `openlist.fs.list`
-::: en
-List files and directories under a mount path that the current user can access.
-
-**Parameters**:
-
-| Parameter | Type | Required | Description |
-| ---------- | --------- | -------- | ---------------------------------------------- |
-| `path` | `string` | Yes | Mount path to list, e.g. `"/"` or `"/movies"` |
-| `refresh` | `boolean` | No | Refresh the directory listing before returning |
-| `password` | `string` | No | Optional password for protected paths |
-| `page` | `integer` | No | 1-based page number (default: 1) |
-| `per_page` | `integer` | No | Page size (default: all items) |
-
-**Response**: Returns file list with name, size, type, modification time, thumbnail, hash info, and storage details.
-:::
-
-::: zh-CN
列出当前用户可访问的挂载路径下的文件和目录。
**参数**:
@@ -145,24 +64,9 @@ List files and directories under a mount path that the current user can access.
| `per_page` | `integer` | 否 | 每页大小(默认:全部) |
**响应**:返回文件列表,包含名称、大小、类型、修改时间、缩略图、哈希信息和存储详情。
-:::
### `openlist.fs.get`
-::: en
-Get file or directory details for a mount path that the current user can access.
-
-**Parameters**:
-
-| Parameter | Type | Required | Description |
-| ---------- | -------- | -------- | ------------------------------------------------ |
-| `path` | `string` | Yes | Mount path to inspect, e.g. `"/movies/demo.mp4"` |
-| `password` | `string` | No | Optional password for protected paths |
-
-**Response**: Returns file details including name, size, type, modification time, raw URL, readme, header, provider, and related files at the same level.
-:::
-
-::: zh-CN
获取当前用户可访问的挂载路径下的文件或目录详情。
**参数**:
@@ -173,25 +77,9 @@ Get file or directory details for a mount path that the current user can access.
| `password` | `string` | 否 | 受保护路径的密码 |
**响应**:返回文件详情,包括名称、大小、类型、修改时间、原始 URL、README、Header、提供商及同级相关文件。
-:::
### `openlist.fs.link`
-::: en
-Return usable link information for a file path that the current user can access.
-
-**Parameters**:
-
-| Parameter | Type | Required | Description |
-| ---------- | -------- | -------- | ----------------------------------------------- |
-| `path` | `string` | Yes | File mount path, e.g. `"/movies/demo.mp4"` |
-| `password` | `string` | No | Optional password for protected paths |
-| `type` | `string` | No | Optional link type forwarded to storage drivers |
-
-**Response**: Returns link information including direct URL, proxy URL, download URL, HTTP headers, content length, concurrency, and part size (for multi-part downloads).
-:::
-
-::: zh-CN
返回当前用户可访问的文件路径的可用的链接信息。
**参数**:
@@ -203,26 +91,10 @@ Return usable link information for a file path that the current user can access.
| `type` | `string` | 否 | 传递给存储驱动的可选链接类型 |
**响应**:返回链接信息,包括直链 URL、代理 URL、下载 URL、HTTP 头、内容长度、并发数和分片大小(用于多部分下载)。
-:::
-
-## Protocol Details { lang="en" }
-
-## 协议细节 { lang="zh-CN" }
-
-### Transport { lang="en" }
-### 传输方式 { lang="zh-CN" }
+## 协议细节
-::: en
-OpenList implements the MCP **Streamable HTTP** transport. The endpoint accepts:
-
-- `POST /mcp` — Main endpoint for all MCP JSON-RPC requests
-- `GET /mcp` — Returns `405 Method Not Allowed` with `Allow: POST, DELETE` (used for CORS preflight validation)
-- `DELETE /mcp` — Terminates an active session (requires `MCP-Session-Id` header)
-
-:::
-
-::: zh-CN
+### 传输方式
OpenList 实现了 MCP **Streamable HTTP** 传输。端点接受:
@@ -230,39 +102,11 @@ OpenList 实现了 MCP **Streamable HTTP** 传输。端点接受:
- `GET /mcp` — 返回 `405 Method Not Allowed` 及 `Allow: POST, DELETE`(用于 CORS 预检验证)
- `DELETE /mcp` — 终止活跃会话(需要 `MCP-Session-Id` 头)
-:::
-
-### Authentication {{ lang="en" }}
-
-### 认证 {{ lang="zh-CN" }}
-
-::: en
-
-The MCP endpoint reuses OpenList's authentication middleware. Requests must include a valid `Authorization` header with a valid user token. The session is bound to the authenticated user — a user cannot use sessions belonging to other users.
-
-:::
-
-::: zh-CN
+### 认证
MCP 端点复用 OpenList 的认证中间件。请求必须在 `Authorization` 头中包含有效的用户令牌。会话与认证用户绑定——用户不能使用属于其他用户的会话。
-:::
-
-### Session Lifecycle {{ lang="en" }}
-
-### 会话生命周期 {{ lang="zh-CN" }}
-
-::: en
-
-1. **Initialize**: Client sends `initialize` request. Server returns a `MCP-Session-Id` response header.
-2. **Notify Initialized**: Client sends `notifications/initialized` to mark the session as ready.
-3. **Tool Calls**: Client sends `tools/list` and `tools/call` requests with the `MCP-Session-Id` header.
-4. **Ping**: Client may send `ping` to keep the session alive.
-5. **Cleanup**: Sessions expire after 30 minutes of inactivity. Global maximum: 128 sessions per server, 16 sessions per user. The least recently used sessions are evicted first.
-
-:::
-
-::: zh-CN
+### 会话生命周期
1. **初始化**:客户端发送 `initialize` 请求。服务器返回 `MCP-Session-Id` 响应头。
2. **通知已初始化**:客户端发送 `notifications/initialized` 将会话标记为就绪。
@@ -270,49 +114,13 @@ MCP 端点复用 OpenList 的认证中间件。请求必须在 `Authorization`
4. **心跳**:客户端可发送 `ping` 保持会话活跃。
5. **清理**:会话在 30 分钟无活动后过期。全局上限:每台服务器 128 个会话,每个用户 16 个会话。最近最少使用的会话会被优先淘汰。
-:::
-
-### Protocol Version {{ lang="en" }}
-
-### 协议版本 {{ lang="zh-CN" }}
-
-::: en
-
-Supported protocol versions: `2025-11-25` (default), `2025-06-18`.
-
-The server returns its protocol version during `initialize` negotiation. Subsequent requests must carry a compatible `MCP-Protocol-Version` header matching the negotiated version.
-
-:::
-
-::: zh-CN
+### 协议版本
支持的协议版本:`2025-11-25`(默认)、`2025-06-18`。
服务器在 `initialize` 协商期间返回其协议版本。后续请求必须携带与协商版本匹配的 `MCP-Protocol-Version` 头。
-:::
-
-### Error Codes {{ lang="en" }}
-
-### 错误码 {{ lang="zh-CN" }}
-
-::: en
-
-| Code | Meaning |
-| ------ | ---------------------------------- |
-| -32700 | Parse error |
-| -32600 | Invalid request |
-| -32601 | Method not found |
-| -32602 | Invalid params |
-| -32603 | Internal error |
-| -32000 | Bad request (missing headers, etc) |
-| -32001 | Session/user not found |
-| -32002 | Session not initialized |
-| -32003 | Permission error |
-
-:::
-
-::: zh-CN
+### 错误码
| 错误码 | 含义 |
| ------ | -------------------- |
@@ -326,36 +134,8 @@ The server returns its protocol version during `initialize` negotiation. Subsequ
| -32002 | 会话未初始化 |
| -32003 | 权限错误 |
-:::
-
-## Example: Using with AI Coding Agents { lang="en" }
-
-## 示例:与 AI 编码助手一起使用 { lang="zh-CN" }
+## 示例:与 AI 编码助手一起使用
-::: en
-Many AI coding assistants support the MCP protocol and can be configured to use OpenList as a file system tool. Below is an example configuration (e.g., for VS Code or Claude Desktop):
-
-```json
-{
- "mcpServers": {
- "openlist": {
- "type": "http",
- "url": "https://your-domain:port/mcp",
- "headers": {
- "Authorization": "YOUR_OPENLIST_TOKEN"
- }
- }
- }
-}
-```
-
-Replace `YOUR_OPENLIST_TOKEN` with your actual OpenList authentication token, which can be obtained from the OpenList management panel.
-
-> **Warning**: Do **NOT** prefix the token with `Bearer `. The `Authorization` header value must be the token itself, nothing else.
-
-:::
-
-::: zh-CN
许多 AI 编码助手支持 MCP 协议,可以配置为使用 OpenList 作为文件系统工具。以下是一个示例配置(例如用于 VS Code 或 Claude Desktop):
```json
@@ -375,5 +155,3 @@ Replace `YOUR_OPENLIST_TOKEN` with your actual OpenList authentication token, wh
将 `YOUR_OPENLIST_TOKEN` 替换为你的 OpenList 认证令牌,可从 OpenList 管理面板获取。
> **Warning**:**不要**在令牌前加 `Bearer ` 前缀。`Authorization` 头的值必须直接是令牌本身,不要加任何前缀。
-
-:::
diff --git a/pages/guide/advanced/meta.md b/pages/guide/advanced/meta.md
index 989c85f4d..5c1909e4f 100644
--- a/pages/guide/advanced/meta.md
+++ b/pages/guide/advanced/meta.md
@@ -1,52 +1,20 @@
---
-title:
- en: Meta
- zh-CN: 元信息
categories:
- guide
- advanced
top: 80
---
-::: en
-Most settings in meta information apply to `All Roles`. The `Read Users` and `Write Users` fields are exceptions — they allow you to restrict access to specific users.
-:::
-::: zh-CN
-元信息中的大多数设置对`所有角色`生效。`可读用户`和`可写用户`字段是例外——它们允许你将访问权限限制到特定用户。
-:::
+# 元信息
-## Path { lang="en" }
+元信息中的大多数设置对`所有角色`生效。`可读用户`和`可写用户`字段是例外——它们允许你将访问权限限制到特定用户。
-## 路径 { lang="zh-CN" }
+## 路径
-::: en
-The path for this meta to take effect.
-:::
-::: zh-CN
此元信息生效的路径。
-:::
-
-## Password { lang="en" }
-
-## 密码 { lang="zh-CN" }
-::: en
-Password required to access this path.
+## 密码
-- Meta information password will not take effect when accessed using `WebDav`
-
-::: danger Notes
-If you want the password to be effective in subfolders, please check `Apply to sub folder` after the password. Do not check `Write` and then check `Apply to sub folder`
-
-The correct check example is shown below. If you configure the options correctly, if you check the wrong option `Write` and then check `Apply to sub folder`, it will cause anyone to have permission to write dangerous operations
-
-
-
-
-
-:::
-
-::: zh-CN
访问此路径需要密码
- 元信息密码在使用`WebDav`访问时不会生效
@@ -62,106 +30,39 @@ The correct check example is shown below. If you configure the options correctly
:::
-## Read Users { lang="en" }
-
-## 可读用户 { lang="zh-CN" }
-
-::: en
-A whitelist of users allowed to read this path. If the list is non-empty, only the selected users can access the path; all other users will be denied access.
-
-- Users are selected by name in the management interface
-- Check `Apply to sub folder` to also restrict sub-directories
+## 可读用户
-:::
-::: zh-CN
允许读取此路径的用户白名单。如果列表非空,则只有选中的用户才能访问该路径,其他所有用户将被拒绝访问。
- 在管理界面中通过用户名选择用户
- 勾选`应用到子文件夹`可同时限制子目录
-:::
-
-## Write Users { lang="en" }
-
-## 可写用户 { lang="zh-CN" }
+## 可写用户
-::: en
-A whitelist of users allowed to write to this path. If the list is non-empty, only the selected users can perform write operations (upload, create, rename, move, delete) on this path.
-
-- Users are selected by name in the management interface
-- Check `Apply to sub folder` to also restrict sub-directories
-
-:::
-::: zh-CN
允许写入此路径的用户白名单。如果列表非空,则只有选中的用户才能对该路径执行写入操作(上传、新建、重命名、移动、删除)。
- 在管理界面中通过用户名选择用户
- 勾选`应用到子文件夹`可同时限制子目录
-:::
+## 开放写入
-## Write Content Bypass { lang="en" }
-
-## 开放写入 { lang="zh-CN" }
-
-::: en
-Allow any user to make directory, create new file and upload files, bypassing user-level write permission checks.
-:::
-::: zh-CN
允许任何用户新建目录、新文件和上传文件,绕过用户级别的写入权限检查。
-:::
-
-## Hide { lang="en" }
-
-## 隐藏 { lang="zh-CN" }
-
-::: en
-The objects to hide of this path, One regular expression (in `Golang`) per line
-- Meta information hiding can take effect when accessed using `WebDav`
+## 隐藏
-:::
-::: zh-CN
此路径要隐藏的对象,每行一个正则表达式(在 `Golang` 中)
- 元信息隐藏在使用`WebDav`访问时可以生效
-:::
-
-## Readme { lang="en" }
-
-## 说明 { lang="zh-CN" }
+## 说明
-::: en
-The Readme to render while enter this path, support markdown content or markdown link.
-
-- Show at bottom of list
-- The automatically rendered file name is: **`readme.md`**
-
-:::
-::: zh-CN
进入该路径时渲染的自述文件,支持 Markdown 内容或 Markdown 链接。
- 在列表底部显示
- 自动渲染的文件名为:**`readme.md`**
-:::
-
-## Header { lang="en" }
-
-## 顶部说明 { lang="zh-CN" }
-
-::: en
-The Readme to render while enter this path, support markdown content or markdown link.
+## 顶部说明
-- Show at top of list
-- The automatically rendered file name is: **`top.md`**
- - Files can not be displayed in the list, for example `readme.md` is not displayed in the list
- - Backstage --> Settings --> Global --> Hidden files --> Add newline `/\/top.md/i`
-
-:::
-
-::: zh-CN
进入该路径时渲染的自述文件,支持 Markdown 内容或 Markdown 链接。
- 在列表顶部显示
@@ -169,36 +70,14 @@ The Readme to render while enter this path, support markdown content or markdown
- 可以在列表中不显示文件,例如`readme.md`不在列表显示
- 后台 --> 设置 --> 全局 --> 隐藏文件 --> 换行添加 `/\/top.md/i`
-:::
-
-## Apply to sub folder { lang="en" }
-
-## 应用到子文件夹 { lang="zh-CN" }
+## 应用到子文件夹
-::: en
-Apply this meta to sub folder of specific path
-:::
-::: zh-CN
将此元信息应用于特定路径的子文件夹
-:::
-## :warning: Tips { lang="en" }
+## :warning: Tips
-## :warning: Tips { lang="zh-CN" }
-
-::: en
-
-Regarding hidden, users without permissions can search for hidden folders/files, solutions:
-
-:white_check_mark: If you want to hide the folder in a folder, create a new Yuan information alone, and select the folder we want to hide,,Hidden if you want to hide everything, write directly`.*`
-
-:x: You cannot directly fill in the meta information of the root directory `/`, and then fill in the folder we want to hide, the error case [View details](https://github.com/alist-org/alist/issues/4494) > 
-:::
-
-::: zh-CN
关于隐藏,没有权限的用户可以搜索到隐藏的文件夹/文件,解决方案:
:white_check_mark:如果你要隐藏某个文件夹內的文件夹,要单独新建一条元信息,路径选择我们要隐藏的文件夹,隐藏如果你要隐藏所有直接写 `.*`即可
:x: 不可以直接在选择根目录`/`的元信息內填写,然后隐藏位置填写我们要隐藏的文件夹,错误案例[查看详情](https://github.com/alist-org/alist/issues/4494) > 
-:::
diff --git a/pages/guide/advanced/offline-download.md b/pages/guide/advanced/offline-download.md
index bdc6c1c9e..a395691ab 100644
--- a/pages/guide/advanced/offline-download.md
+++ b/pages/guide/advanced/offline-download.md
@@ -1,34 +1,14 @@
---
-title:
- en: Offline download
- zh-CN: 离线下载
categories:
- guide
- advanced
top: 50
---
-## Please read this tip before use { lang="en" }
+# 离线下载
-## 使用前请阅读此提示 { lang="zh-CN" }
+## 使用前请阅读此提示
-::: en
-::: warning Please read the following tips carefully
-There are two kinds of software with offline download function
-
-The two usages are the same, and the software configuration is set in advance (see the following instructions for specific configuration),
-
-Then go back to the front-end interface, **find the folder you want to upload offline files to, and you can manually enter the folder**
-
-Then find the offline download button in the lower right corner, and choose to use Aria2 download or qBittorrent download (>v 3.11.0)
-
-If you use **docker**, please map the following two default paths by yourself. (mapped to the same directory on the host machine)
-
-- **/opt/openlist/data/temp/aria2**
-- **/opt/openlist/data/temp/qBittorrent**
-
-:::
-::: zh-CN
::: warning 请仔细阅读以下提示
有两款离线下载功能软件
@@ -45,22 +25,6 @@ If you use **docker**, please map the following two default paths by yourself. (
:::
-::: en
-::: danger OpenList ≥ 3.42.0
-OpenList Version ≥ 3.42.0 View [Allow all cloud disks to call other cloud disks' offline download tools](../../configuration/other.md)
-
-- ≥ 3.42.0 If you want to use offline download, you need to configure a temporary folder in the background before you can use it (otherwise it will only show **SimpleHttp**)
-- manage ==> settings ==> other ( **https://example.com/@manage/settings/other** )
- - If you want to [use/configure] PikPak for offline downloading
- 1. Mount PikPak storage
- 2. Set Pikpak temp dir in the background
- 3. Select any folder of this account as a temporary directory
- - If multiple PikPaks are mounted and you want to use that account for offline downloading, then select the directory of that account as the temporary directory.
-
-**The following applies only to configuration instructions**
-
-:::
-::: zh-CN
::: danger OpenList ≥ 3.42.0
OpenList版本 ≥ 3.42.0 的查看 [允许所有云盘调用其他云盘的离线下载工具](../../configuration/other.md)
@@ -78,15 +42,8 @@ OpenList版本 ≥ 3.42.0 的查看 [允许所有云盘调用其他云盘的离
### Aria2
-::: en
-[**Click to view instructions for use**](../../configuration/other.md)
-
-:::
-::: zh-CN
[**点击查看使用说明**](../../configuration/other.md)
-:::
-
### qBittorrent
#### Docker Compose
@@ -134,34 +91,6 @@ networks:
#### Windows
-::: en
-(Here we take the Windows side as an example, I don’t know if there is one on the Linux side)
-First of all, we need to configure the default values on the client side of **`qBittorrent`**
-According to [source code](https://github.com/alist-org/alist/blob/main/internal/bootstrap/data/setting.go#L159-L162), we know that the default values are admin:adminadmin@localhost:8080/
-
-- **ip**: localhost
-- **port**: 8080
-- **user**: admin
-- **password**: adminadmin
-
-1. We fill in the above parameters into the **`qBittorrent`** client, after configuration, we go to the OpenList front end to download offline (**method refer to the description at the beginning**)
- - If you are prompted after submitting the offline link: **Qbittorrent not ready**, try restarting both OpenList and qBittorrent
-2. Default value configuration view address: (The link may also change position based on subsequent optimization)
- - **https://github.com/OpenListGo/alist/blob/main/internal/offline_download/qbit/qbit.go#L28**
- - `{ *** Value: "http://admin:adminadmin@localhost:8080/", Type: conf.TypeString, *** } `
-
-3. Use **`qBittorrent`** to offline `.torrent` type files
- - Although you cannot directly add offline `.torrent` type files, you can save the country with a curve Reference: [View method](https://github.com/alist-org/alist/issues/2459#issuecomment-1354870010)
-
-4. You can configure it yourself not to delete after the download is complete, but to do seeding, the default is `0`, and it will be deleted immediately after uploading
- - Modification location: **OpenList background** --> **Settings** --> **Qbittorrent seedtime** option, set the time you need to configure, the unit is `minute`, after the set seeding time is reached, it will automatically delete
-
-5. **We can also customize, instead of using the default presets**
- - Modification location: **OpenList Manage** --> **Settings** --> **Qbittorrent url** option, just follow the modification
- 
-
-:::
-::: zh-CN
(这里以Windows端举例,Linux端不清楚有没有)
首先我们先要在 **`qBittorrent`** 客户端配置好预设值
根据[源码](https://github.com/OpenListTeam/OpenList/blob/main/internal/bootstrap/data/setting.go#L159-L162)我们知道预设值分别是 admin:adminadmin@localhost:8080/
@@ -187,32 +116,7 @@ According to [source code](https://github.com/alist-org/alist/blob/main/internal
- 修改位置:**OpenList后台** --> **设置** --> **Qbittorrent url** 选项,照着修改即可

-:::
-
-#### Precautions { lang="en" }
-
-#### 注意事项 { lang="zh-CN" }
-
-::: en
-
-1. Appeared in the background qBittorrent task: **`torrent parse timeout`**, parsing timed out
-2. The torrent can be parsed, but **`The system cannot find the path specified.`** appears when uploading.
-
- The above two methods are most likely caused by the qBittorrent software itself, probably because of the green version and the modified version that have undergone some functional castration modifications. It is recommended to go to the official website to download and install it to restore it (the conclusion drawn by myself after stepping on the pit)
- - **qBittorrent** official website: **https://www.qbittorrent.org/**
- - **qBittorrent-Enhanced-Edition** GitHub: **https://github.com/c0re100/qBittorrent-Enhanced-Edition**
-
-3. Because the `v2.8.3` API is used, the minimum version of qBittorrent should be `4.4.0beta2` or `4.3.8` official version
-4. If **qBittorrent** sets the ip where alist is located to be exempt from authentication, you can directly omit the user name and password before `@` (configured on the **qBittorrent** client side)
- - 3 and 4 are not mentioned in the video.
- **qBittorrent** Video Tutorials
-
-
-
- **If the video fails, you can watch it here: https://b23.tv/J34qDiG**
-
-:::
-::: zh-CN
+#### 注意事项
1. 在后台qBittorrent任务中出现:**`torrent parse timeout`**,解析超时
2. 可以解析种子下载,但是在上传的时候出现 **`The system cannot find the path specified.`** 找不到路径
@@ -230,19 +134,10 @@ According to [source code](https://github.com/alist-org/alist/blob/main/internal
**视频若失效可以前往观看:https://b23.tv/J34qDiG**
-:::
-
### SimpleHttp
-::: en
-Subsequent supplement
-
-:::
-::: zh-CN
后续补充
-:::
-
### Transmission
#### Docker Compose
@@ -289,24 +184,8 @@ networks:
openlist:
```
-### 115 Cloud、PikPak、Thunder { lang="en" }
-
-### 115、PikPak、迅雷 { lang="zh-CN" }
+### 115、PikPak、迅雷
-::: en
-Versions v3.42.0 and above support calling the offline download function in OpenList
-
-After setting other configuration temporary directory options in the background, select the offline download option in the lower right corner of the front-end page to select the corresponding driver offline download function
-
-- Support:`magnet`, `http`, `ed2k` links
- - PikPak: Also supports: X, TikTok, Facebook, TG URL links
-- Some tips for using 115 offline downloads:
- 1. Out of sync problems may occur (manual refresh in the lower right corner )
- 2. Currently, when the download is successful, completed tasks in the offline list are deleted.
- 3. 115 Task URLs that are already in the offline list cannot be added again.
-
-:::
-::: zh-CN
v3.42.0 及以上版本支持在OpenList调用离线下载功能
在后台设置其他配置临时目录选项后,前端页面右下角选择 离线下载选项选择对应的驱动离线下载功能
@@ -317,5 +196,3 @@ v3.42.0 及以上版本支持在OpenList调用离线下载功能
1. 可能会发生不同步的问题(手动右下角刷新 )
2. 目前当下载成功后,删除离线列表中完成的任务
3. 115已经在离线列表中的任务url不能再次添加
-
-:::
diff --git a/pages/guide/advanced/rapid_upload.md b/pages/guide/advanced/rapid_upload.md
index 0ff56215c..c82f67207 100644
--- a/pages/guide/advanced/rapid_upload.md
+++ b/pages/guide/advanced/rapid_upload.md
@@ -1,64 +1,33 @@
---
-title:
- en: Rapid upload
- zh-CN: 秒传
categories:
- guide
- advanced
top: 130
---
-## Introduce { lang="en" }
+# 秒传
-## 介绍 { lang="zh-CN" }
+## 介绍
-::: en
-**Rapid upload** means that files between two cloud disks can be uploaded to each other quickly without waiting. Here is an introduction to what can be mutually Rapid uploaded
-**There is a premise that the files required for Rapid upload in network disk A are already available in network disk B, so that Rapid upload can be performed, otherwise it will be uploaded normally**
-::: en
-::: tip
-**The left side** is the source Network Disk、**The top side** is the target Network Disk
-:::
-::: en
-| | Aliyun | 115 | Baidu(5) | 189 | Xunlei | PikPak | GoogleDrive | OneDrive | localhost |
-| :---------: | :----------------: | :----------------: | :----------------: | :----------------: | :-------------: | :----------------: | :-------------: | :-------------: | :-------------: |
-| localhost | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| Aliyun | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 115 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| Baidu | :x: | :x: | :question: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 189 | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| Xunlei | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| PikPak | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| GoogleDrive | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| OneDrive | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :no_entry_sign: |
-
-1. The **Aliyun** mentioned here refers to [**aliyundriveOpen**](../../guide/drivers/aliyundrive_open.md)
-2. **OneDrive** has not been tested because there is no account. If the test is valid and there are no problems, feedback is welcome.
-3. **Aliyun** and **189**: Both need to turn on the Rapid upload option in the storage configuration, otherwise Rapid upload cannot be performed
-4. **GoogleDrive** files can be transferred to **189** in seconds and **189** can transfer files to **189** in seconds. There may be some problems and are not very stable. Need to pay attention to observation
-5. **Baidu Net Disk** can only be stored from local storage Rapid Upload to the net disk. If you use cross-storage to Copy Rapid Upload, you can only download the file first and then perform Rapid Upload.
-
-:::
-::: zh-CN
**秒传** 就是两个云盘之间的文件可以快速相互上传,不用等待,下面介绍一下都有哪些可以相互秒传。
有个前提,就是A网盘需要秒传的文件,在B网盘已经有了,才可以进行秒传,否则就是正常上传。
-::: zh-CN
+
::: tip
**左侧**为来源网盘、**顶部**为目标网盘。
:::
-::: zh-CN
-| | 阿里云盘 | 115 | 百度云盘(5) | 天翼云盘 | 迅雷云盘 | PikPak | 谷歌云盘 | OneDrive | 本地存储 |
-| :------: | :----------------: | :----------------: | :----------------: | :----------------: | :-------------: | :----------------: | :-------------: | :-------------: | :-------------: |
-| 本地存储 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| 阿里云盘 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 115 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 百度云盘 | :x: | :x: | :question: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 天翼云盘 | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| 迅雷云盘 | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| PikPak | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
-| 谷歌云盘 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
-| OneDrive | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :no_entry_sign: |
+
+| | 阿里云盘 | 115 | 百度云盘(5) | 天翼云盘 | 迅雷云盘 | PikPak | 谷歌云盘 | OneDrive | 本地存储 |
+| :------: | :----------------: | :----------------: | :--------------------: | :----------------: | :-------------: | :----------------: | :-------------: | :-------------: | :-------------: |
+| 本地存储 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| 阿里云盘 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 115 | :white_check_mark: | :white_check_mark: | :question: | :x: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 百度云盘 | :x: | :x: | :question: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 天翼云盘 | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| 迅雷云盘 | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| PikPak | :x: | :x: | :question: | :x: | :x: | :white_check_mark: | :x: | :x: | :no_entry_sign: |
+| 谷歌云盘 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :no_entry_sign: |
+| OneDrive | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :grey_question: | :no_entry_sign: |
1. 这里提到的**阿里云盘**是指的[**阿里云盘Open**](../../guide/drivers/aliyundrive_open.md)
2. **OneDrive** 是因为已经没有了帐号暂时没有进行测试,如果有进行测试有效无问题,欢迎反馈
@@ -66,28 +35,12 @@ top: 130
4. 将**谷歌云盘**文件秒传到**天翼云盘** 和 **天翼云盘**将文件秒传到**天翼云盘**,可能有一些问题,并不是很稳定,需要留意观察
5. **百度云盘**只能从本地存储秒传到网盘,如果是使用跨存储进行复制秒传只能先将文件下载下来再进行秒传行为
-:::
-
-### How to use { lang="en" }
-
-### 使用方法 { lang="zh-CN" }
-
-::: en
-
-1. Right-click the file you want to transfer in the list, click Copy, and then select the folder to transfer to.
-2. If there are multiple files, you can select the entire folder or open the checkbox in the lower right corner to select multiple files, and then there is a row of buttons at the bottom to click to copy.
-
-:::
diff --git a/pages/guide/advanced/s3.md b/pages/guide/advanced/s3.md
index bf6e8196f..1366f4a3f 100644
--- a/pages/guide/advanced/s3.md
+++ b/pages/guide/advanced/s3.md
@@ -1,56 +1,26 @@
---
-title:
- en: S3
- zh-CN: 对象存储
categories:
- guide
- advanced
top: 40
---
-::: en
-This function is to map OpenList as the S3 protocol. You can use the [S3 client](#s3-client-recommendation-fill-in-sample), just as OpenList can be mapped to WebDAV.
+# 对象存储
-- It can be the entire OpenList (root directory) or a separate folder
-
-:::
-::: zh-CN
此功能是将 OpenList 映射为 S3 协议,可以使用 [S3客户端](#s3-客户端推荐-填写示例) 使用和查看,就像 OpenList 可以映射为 WebDAV 一样
- 可以是整个OpenList(根目录),也可以是单独某个文件夹
-:::
-
-## 1. How to use { lang="en" }
-
-## 1. 使用方式 { lang="zh-CN" }
-
-::: en
-1.1 If it is for the first time, first open OpenList Manage to generate `S3 access key id` and `S3 secret access key` to save, then stop OpenList, open the configuration file to enable the `S3` service
-
-- If you update ID and secrets in the future, update and save, and then restart OpenList to take effect
-
-:::
+## 1. 使用方式
-::: zh-CN
1.1 如果是第一次使用,先打开OpenList后台生成一下 `访问客户端ID` 和 `访问秘钥` 保存,然后停止 OpenList,打开配置文件启用 `S3` 服务
- 如果你后续更新访问ID和秘钥,更新保存,再重启OpenList才可以生效
-:::
-

-::: en
-1.2 Open the [Configuration File](../../configuration/configuration.md#s3), change the `enable` field to` true` to enable S3 service
-
-:::
-
-::: zh-CN
1.2 打开 [配置文件](../../configuration/configuration.md#s3),将`enable`字段改成`true`启用S3服务
-:::
-
```json{2}
"s3": {
"enable": true,
@@ -59,39 +29,13 @@ This function is to map OpenList as the S3 protocol. You can use the [S3 client]
}
```
-::: en
-1.3 After the first two steps are completed, Start OpenList, open the Manage `s3` configuration page, and choose to store a certain path as an object to store the barrel
-
-- On the left is the name of the storage bucket displayed outside, and the right is the existing list directory path of OpenList. If you want to map the entire root directory, you can choose the `root` path in the list
- - There may be errors in manual filling. It is recommended to use the `Choose` button on the right side for selection
- 
-
-:::
-
-::: zh-CN
1.3 前两步操作完成后启动 OpenList,继续进入后台`S3`配置页面,选择自己想将某路径映射为对象存储存储桶
- 左侧是对外显示的存储桶名字,右侧是 OpenList 已有的列表目录路径,如果想将整个根目录全部映射出去可以可以选择列表中的 `root` 路径
- 手动填写可能会出现错误,建议使用右侧 `选择` 按钮进行选择

-:::
-
-## 2. Use instructions { lang="en" }
-
-## 2. 使用说明 { lang="zh-CN" }
-
-::: en
-
-1. For ordinary object downloads, the transfer mode depends on the storage and proxy settings:
- - If proxying is not required and the storage provides a direct download URL, OpenList may return an HTTP 302 redirect to the storage provider.
- - If **Web Proxy** is enabled for the target storage, or another driver or proxy rule requires proxying, OpenList serves the response body through the local server.
-2. A direct redirect saves OpenList bandwidth, but the S3 client must follow a cross-host redirect and accept the provider URL's access requirements. Server relay uses OpenList bandwidth and is a safer starting point for clients that cannot use the direct provider redirect. For repository tools such as restic or rustic, enable **Web Proxy** unless direct mode has been verified.
-3. Currently only supports the use of client operations `List`, `get`, `put`, `del`, other operations are not supported yet
-4. Currently only supports the use of the `S3 Client` to operate, Mount S3 to the `OpenList Object Storage` temporarily unavailable
-
-:::
-::: zh-CN
+## 2. 使用说明
1. 对于普通对象下载,传输方式取决于存储和代理设置:
- 如果不需要代理,并且存储提供了直链下载地址,OpenList 可能返回 HTTP 302,将客户端重定向到存储提供商。
@@ -100,11 +44,7 @@ This function is to map OpenList as the S3 protocol. You can use the [S3 client]
3. 目前仅支持使用客户端 `获取列表`、`下载`、`上传`、`删除` 操作,其它操作暂未支持
4. 目前仅支持使用`S3客户端`来进行操作,挂载到OpenList对象存储暂时无法使用
-:::
-
-## 3. S3 client recommendation/fill in sample { lang="en" }
-
-## 3. S3 客户端推荐/填写示例 { lang="zh-CN" }
+## 3. S3 客户端推荐/填写示例
### 3.1. S3 Browser
diff --git a/pages/guide/advanced/search.md b/pages/guide/advanced/search.md
index 167231e0b..589d208b4 100644
--- a/pages/guide/advanced/search.md
+++ b/pages/guide/advanced/search.md
@@ -1,28 +1,14 @@
---
-title:
- en: Search
- zh-CN: 搜索/索引
categories:
- guide
- advanced
top: 100
---
-### how to use { lang="en" }
+# 搜索/索引
-### 如何使用 { lang="zh-CN" }
+### 如何使用
-::: en
-::: danger Follow the steps below to enable search:
-
-1. Go to the `indexes` page to select a **Search index** and click `Save`.
-2. After the index is saved, click `Build indexes` to build the index.
-3. Now you can search for files by click the search block on the top right corner of the page or by using the shortcut `Ctrl + K`.
-
-:exclamation: If you do not follow the above prompts, the prompt will be opened: **Search Not available**
-:::
-
-::: zh-CN
::: danger 按照以下步骤开启搜索:
1. 转到`索引`页,选择一个**搜索索引**,并单击`保存`;
@@ -32,48 +18,7 @@ top: 100
:exclamation: 若不按照上述提示开启会提示:**Search not available**
:::
-## Difference between different search indexes { lang="en" }
-
-## 不同搜索索引之间的差异 { lang="zh-CN" }
-
-::: en
-
-- `database`: Search by database, which is using the existing data.db. It will create a new table, record the parent directory, name, and size of every object, but the search does not split words which means that match whether the keywords you enter appear in the name of object. In general, if you don't have a specific search requirement, we recommend you choose it.
-
-- `database (non-full-text search)`: The full-text search mode is used above, but full-text search will have some strange problems when using **MySQL database** as an OpenList database, which has not been resolved yet, so if your OpenList database Change to **MySQL**, and your OpenList version **`≥3.9.1`** It is recommended that you use this to build an index, although it is slower than full-text search and the gap is not very big, but it will not search for strange files , it’s more secure. After the future version is repaired, we will inform you to use the new full-text search to build the index. If you are using **sqlite3**, you can use whichever you like.
-
-- `bleve`: An open source full-text search engine. It will split the words in the name of object and search for the keywords you enter. But its search results may be so strange that you can't get the results you want, and it will take up more resources.
-
-- **sqlite3** is easy to trigger `database is locked` lock library cannot write files
- - Solution to `database is locked`:
- - It's because the database is building the index. If you are still in the building process, please wait patiently.
- - If the index has been completed, it is caused by turning on [Automatically update the index](#automatically-update-the-index). Please turn off [Automatically update the index](#automatically-update-the-index). If the problem still occurs, please close and restart OpenList.
- - Or switch the database to MySQL
-
-- `meilisearch`: A feature-rich, multilingual, blazing-fast search engine written in Rust. More accurate compared to `bleve`.
- Requires [self-hosting](https://www.meilisearch.com/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch) or using a cloud service.
- `OpenList` uses "http://localhost:7700" as the default meilisearch host,
- if you host `meilisearch` and `OpenList` together locally with `meilisearch` authentication disabled, `OpenList` will automatically connect it,
- otherwise you need to modify the **meilisearch** field in the configuration file (host, index UID, API key).
- When `meilisearch` instance is protected by `api key`, the minimal actions of `api key` required by `OpenList` are `["search","indexes.get","settings.*","documents.*","tasks.*"]`.
- Storage Space Usage: ~800MiB per 100,000 files (including folders), which may be larger or smaller depending on filename length and folder depth. Please note that the storage space occupied by `meilisearch` will increase as files are continuously added/updated, and space will not be released even if you delete some or all documents from the index, unless you create a refresh instance. Generally, you don't need to worry too much about this situation, as the storage space usage will stabilize at a certain value with use, and will only have a significant impact on space usage when large numbers of files are added.
- - Download:https://github.com/meilisearch/meilisearch/releases
- - `meilisearch` Docs:https://www.meilisearch.com/docs/
- - Reference:https://github.com/AlistGo/alist/discussions/6830
-
-The following table could help you understand the difference between these search indexes quickly:
-
-| | database(full text search) | Database (non-full-text search) | bleve | meilisearch |
-| ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | ----------- | ----------------------------------------- |
-| Search results | Can't search in Chinese | More accurate than full-text search, you can search Chinese | Fuzzy match | Support CJK tokenizers & Chinese variants |
-| Search speed | Fast,see above for advantages and disadvantages | Slower than full-text search, see above for advantages and disadvantages | Fast | Blazing fast |
-| Specify folder search | Yes | Yes | No | Yes |
-| Disk usage | Low | Low | High | High |
-| Auto incremental update | Yes | Yes | No | Yes |
-
-:::
-
-::: zh-CN
+## 不同搜索索引之间的差异
- `数据库`:按数据库搜索,它使用现有的 data.db。它将创建一个新表,记录父目录、名称和每个对象的大小,但搜索不拆分单词,这意味着匹配您输入的关键字是否出现在对象的名称中。一般来说,如果您没有特定的搜索要求,我们建议您选择它。
@@ -107,19 +52,6 @@ The following table could help you understand the difference between these searc
| 硬盘占用 | 低 | 低 | 高 | 高 |
| 自动增量更新 | 支持 | 支持 | 不支持 | 支持 |
-:::
-
-::: en
-::: warning
-If you are using _MySQL_ as the database, it is recommended to use **`non-full-text search`** (strongly recommended)
-
-**`Non-full-text search`** Although it is not as fast as full-text search, it is not much slower. If you insist on using full-text search, you may have to sacrifice the inability to search Chinese
-
-If you use sqlite as the database, there is no full-text search, you can choose any database~
-
-Full-text search: It will not search in the text of all files, don't get it wrong.
-:::
-::: zh-CN
::: warning
若你使用的是 **MySQL** 作为数据库,建议使用 **`非全文搜索`** (强烈推荐)
@@ -130,66 +62,9 @@ Full-text search: It will not search in the text of all files, don't get it wron
全文搜索:不是在所有文件里面进行文件的文字里面进行搜索,别理解错了。
:::
-### Deploy MeiliSearch for indexing using Docker Compose { lang="en" }
-
-### 使用docker compose部署meilisearch进行索引 { lang="zh-CN" }
-
-#### Deploy MeiliSearch using Docker Compose { lang="en" }
-
-#### 使用docker compose部署meilisearch { lang="zh-CN" }
-
-::: en
-
-Feeling confused?
-
-Here's a Compose example to add `meilisearch` to your Openlist Compose. Follow the steps to set up indexing with `meilisearch`.
-
-```yaml
-version: '3.3'
-services:
- openlist:
- image: 'openlistteam/openlist:beta-aio'
- container_name: openlist
- volumes:
- - '/tmp/data/Docker/OpenList:/opt/openlist/data'
- ports:
- - '5244:5244'
- environment:
- - UMASK=022
- networks:
- - openlist
- restart: unless-stopped
-
- meilisearch:
- image: getmeili/meilisearch:v1.16
- container_name: meilisearch
- ports:
- - '7700:7700'
- volumes:
- - /tmp/data/Docker/meilisearch/meili_data:/meili_data
- command: meilisearch --schedule-snapshot --snapshot-dir /meili_data/snapshots
- environment:
- - MEILI_MASTER_KEY=your_master_key_here
- tty: true
- stdin_open: true
- networks:
- - openlist
- restart: unless-stopped
-
-networks:
- openlist:
- driver: bridge
-```
-
-Configuration Explanation:
-
-- `UMASK`: Sets file permissions
-- `getmeili/meilisearch:v1.16`: Official recommendation to use a fixed version number (latest version at time of writing is `v1.16`). You may check the latest version yourself via the [official local deployment docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally).
-- Additional parameters for meilisearch can be modified via the [official local deployment docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally) or deployed using alternative methods.
+### 使用docker compose部署meilisearch进行索引
-:::
-
-::: zh-CN
+#### 使用docker compose部署meilisearch
感到一头雾水?
@@ -238,18 +113,6 @@ networks:
- `getmeili/meilisearch:v1.16`: 官方建议使用固定的版本编号(本文撰写时最新版本为`v1.16`),您可以自行从[官网本地部署docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally)查询最新版本。
- 有关meilisearch的其他参数可以通过[官网本地部署docs](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally)自行修改或采用其他方式部署。
-:::
-
-::: en
-::: warning
-The `/tmp/data/Docker` directory here is merely an example; please store your data in an appropriate location.
-
-Additionally, the `MEILI_MASTER_KEY` here should be replaced with a key you generate yourself. You should substitute it with any alphanumeric string of 16 bytes or more. In most cases, one character corresponds to one byte.
-
-PS: This provides only a basic example. Please modify it according to your needs and add other configurations as required.
-:::
-
-::: zh-CN
::: warning
这里的`/tmp/data/Docker`仅是一个示例,请将你的数据存储在合适的位置。
@@ -258,32 +121,8 @@ PS: This provides only a basic example. Please modify it according to your needs
PS:这里仅仅提供一个基础示例,请根据你的需求进行修改和添加其他配置。
:::
-#### Setting up meilisearch in openlist { lang="en" }
-
-#### 在openlist中设置使用meilisearch { lang="zh-CN" }
-
-::: en
-How to configure MeiliSearch in OpenList
+#### 在openlist中设置使用meilisearch
-First, you need to modify config.json. In this example, it should be located at `/tmp/data/Docker/OpenList/config.json`.
-
-Edit the section below, filling in the IP address and port of your MeiliSearch instance, along with the key you set in `MEILI_MASTER_KEY`.
-
-```json
- "meilisearch": {
- "host": "http://meilisearch:7700",
- "api_key": "your_master_key_here",
- "index": "openlist"
- },
-```
-
-Next, open the management panel, click `Indexes`, select `meilisearch`, and click `Refresh` to rebuild the index.
-
-{width=600px}
-
-:::
-
-::: zh-CN
如何在openlist设置meilisearch
首先你需要修改config.json,在这个示例中,它应该位于`/tmp/data/Docker/OpenList/config.json`。
@@ -302,45 +141,15 @@ Next, open the management panel, click `Indexes`, select `meilisearch`, and clic
{width=600px}
-:::
-
-## Search tips { lang="en" }
-
-## 搜索提示 { lang="zh-CN" }
-
-::: en
-
-- If you want to search for a specific folder, you must choose `database` as the search index;
-- If you choose `database` as the search index and the type of your database is `sqlite3`, we suggest that you don't make any changes in the admin page while building the index, as sqlite3 does not support concurrent writes and can cause `database-lock` issues;
-- If you choose `bleve` as the search index, and if you want to search for new files or if you don't want to search for deleted files, the index needs to be completely rebuilt to take effect because `bleve` does not support incremental updates;
-- But for `database`, it supports incremental updates, so you can search for new files or deleted files just by access the modified folder (and click `refresh` icon if cached) without rebuilding the index, which is much more convenient than `bleve`.
-
-:::
-::: zh-CN
+## 搜索提示
- 如果你想搜索特定的文件夹内的文件,你可以选择`数据库`或`meilisearch`作为搜索索引;
- 如果你选择`数据库`作为搜索索引,你的数据库类型是`sqlite3`,我们建议你在创建索引时不要在管理页面做任何更改,因为 `sqlite3` 不支持并发写,可能导致`数据库锁定`问题;
- 如果你选择`bleve`作为搜索索引,如果你想搜索新文件或不想搜索已删除的文件,索引需要完全重建才能生效,因为`bleve`不支持增量更新;
- 但对于`数据库`/`meilisearch`,它支持增量更新,所以你可以搜索新的文件或删除的文件,只需访问修改的文件夹(并单击'刷新'图标,如果缓存),无需重建索引,这比`bleve`方便得多。
-:::
-
-### Ignore paths { lang="en" }
-
-### 忽略路径 { lang="zh-CN" }
-
-::: en
-Paths to be skipped during index building, one path per line, multiple lines can be filled
+### 忽略路径
-- Example:
- - `/aaa network disk`
- - `/bbb network disk/ccc folder`
-
-If you don't want to configure this, you can turn on the `disable index` option in each driver
-
-:::
-
-::: zh-CN
构建索引期间跳过填写的路径,一行一个路径,可多行填写
- 例子:
@@ -349,21 +158,7 @@ If you don't want to configure this, you can turn on the `disable index` option
如果不想(不会)配置这里,可以去每个驱动中将`禁用索引`选项打开
-:::
-
-## Update index { lang="en" }
-
-## 更新索引 { lang="zh-CN" }
-
-::: en
-
-- (formerly: the path to update the index)
- After building all the indexes, or a file has a large number of file updates, but it is inconvenient to rebuild, you can use this to update the index
-- Example: - /aaa network disk - /bbb network disk/ccc folder
-
-:::
-
-::: zh-CN
+## 更新索引
- (原:要更新索引的路径)
构建完所有索引后,或者某文件有大批量文件更新,但是又不方便点重新构建就可以使用这个来更新一下索引
@@ -371,37 +166,8 @@ If you don't want to configure this, you can turn on the `disable index` option
- `/aaa网盘`
- `/bbb网盘/ccc文件夹`
-:::
-
-### Automatically update the index { lang="en" }
-
-### 自动更新索引 { lang="zh-CN" }
-
-::: en
-:warning: **`The default is off, and the index will not be built automatically`**.
-
-For example, you have already built the index, but added a **network disk mount** or **folder update** later.
-
-But you have already built a lot of indexes. According to the previous words, there are two methods.
-
-1. Go in folder by folder before building
-
-2. Or it is cumbersome to refactor all
-
- But this time, just turn on the **`Automatically build index`** button and enter the **Newly mounted network disk** or **Updated folder**, the indexed files in this directory and The folder automatically builds the index without entering a folder by folder to let him build it automatically
+### 自动更新索引
-- Advantages: Don't worry, all the indexes in this folder can be automatically built if there is an update into the root directory of the updated folder
-- Cons: always on call ready to build
-
----
-
-Someone will find out that [**Path to update index**](#Path to update index) can also be updated? Can be updated but the two do not conflict.
-
-- [**Automatically update index**](#automatically-update-the-index): suitable for users who build indexes for all files
-- [**Update Index**](#update-index): Suitable for **not** to build indexes for all files, but there are files that need to be built, manually build indexes to avoid all being indexed
-
-:::
-::: zh-CN
:warning: **`默认是关闭状态,不自动构建索引`**。
例如你已经构建完毕索引,但是后面又添加一个 **网盘挂载** 或者 **文件夹更新**。
@@ -424,40 +190,13 @@ Someone will find out that [**Path to update index**](#Path to update index) can
- [**自动更新索引**](#自动更新索引):适合将所有文件都构建索引的用户
- [**更新索引**](#更新索引):适合 **不** 将所有文件都构建索引,但是有文件需要构建,自己手动去构建索引避免所有的都被构建索引
-:::
-
-### Maximum index depth { lang="en" }
-
-### 最大索引深度 { lang="zh-CN" }
+### 最大索引深度
-::: en
-default 20.
-The one shown outside is built manually, and the update index option selects the depth in the update index button.
-Explanation: The directory can enter up to several layers. For example, if you have a folder with a depth of 30 layers, set it to 20, and only build the first 20 layers, and the remaining 10 layers will not be built.
-:::
-::: zh-CN
默认为20。
外面显示的是手动构建的,更新索引选项在更新索引按钮里面选择深度。
说明:目录最多进几层,例如你有一个文件夹深度多达30层文件夹,设置为20,只构建前20层,剩下的10层不进行构建。
-:::
-## :warning: Precautions for use { lang="en" }
-
-## :warning: 使用注意事项 { lang="zh-CN" }
-
-::: en
-
-- OpenList **V2** and **v3** types of mounts cannot be built by default
-- If you are using **MySQL** as the database, it is recommended that you use **database (non-full-text search)**, [**Click to view details to see the second item**](#difference-between-different-search-indexes)
-- In the future version (**≥3.9.0 version**), V3 users can choose whether to allow others to mount your network disk and then index it :no_entry:**`Use with caution`**:no_entry:
- - View details: [allow-indexing](/configuration/site#allow-indexing)
- - Don't ask why V2 is not supported, because the V2 version is no longer maintained, so there is no follow-up
-- Why not directly open V2 V3 index construction: **https://github.com/alist-org/alist/discussions/2529**
-- After building an index, users without permissions can search for hidden file/folder solutions [click to view](meta.md#tips)
-
-:::
-
-::: zh-CN
+## :warning: 使用注意事项
- OpenList **V2** 和 **v3** 类型的挂载默认不能构建
- 如果你使用的是 **MySQL** 作为数据库,推荐你使用 **数据库(非全文搜索)**, [**点击查看详情看第二条**](#不同搜索索引之间的差异)
@@ -467,44 +206,8 @@ Explanation: The directory can enter up to several layers. For example, if you h
- 为什么不直接开放V2 V3索引构建: **https://github.com/alist-org/alist/discussions/2529**
- 构建索引后,没有权限的用户可以搜索到隐藏的文件/文件夹解决方案[点击查看](meta.md#tips)
-:::
-
-## The database file is very large, what should I do if it is still the same after clearing the index? { lang="en" }
-
-## 数据库文件很大,清空索引后还是一样大怎么办? { lang="zh-CN" }
-
-::: en
-Normal users do not modify the database options. They use the `sqlite` database to build indexes, which will cause the database file to be particularly large
+## 数据库文件很大,清空索引后还是一样大怎么办?
-- Data files, `Data` folders in the same directory in OpenList program,`data.db,data.db-shm,data.db-wal`
-
-After turning on the constructive index, the more the number you build, the larger the files. Finally, you accidentally occupy the machine's hard disk, and then click the clear index button. What should I do if the file is still as big?
-
-- This is caused by the cache of `sqlite`, there are two solutions:
- 1. We use commands or tools to connect to `sqlite` database, input:**`VACUUM;`**
-
- ```sql
- VACUUM;
- ```
-
- 2. After using the command to clean up, we replace it with `mysql` database before constructing indexes
- - Sqlite replaced with mysql database tutorial:**[BV1iV4y1T7kh](https://www.bilibili.com/video/BV1iV4y1T7kh)**
-
- Comparison after cleaning the command: The picture above shows before cleaning up, and the following figure shows that after cleaning, you can execute several commands several times if there is no effect.
-
- 
-
----
-
-`data.db, data.db-shm, data.db-wal` when backup, when backup,`data.db-shm,data.db-wal` Do these two files need backup?
-
-- In the backup, stop the program first, and then backup. You only need to backup the `data.db` database file. The other two do not need to backup
-
-- It may be after you stop the program`data.db-shm,data.db-wal`will automatically disappear, don't worry
-
-:::
-
-::: zh-CN
正常用户都是没有修改数据库选项使用的是 `sqlite` 数据库来构建索引的,就会导致数据库文件特别大
- 数据库文件在OpenList同级目录下的`data`文件夹,`data.db,data.db-shm,data.db-wal`
@@ -531,5 +234,3 @@ After turning on the constructive index, the more the number you build, the larg
- 建议在备份时,先将程序停止,再进行备份,到时候可以只单独备份`data.db`数据库文件,另外两个可以不进行备份
- 有可能在你停止程序后`data.db-shm,data.db-wal`这两个文件会自动消失,也不用担心
-
-:::
diff --git a/pages/guide/advanced/sso.md b/pages/guide/advanced/sso.md
index b9abd65e3..eda2c4021 100644
--- a/pages/guide/advanced/sso.md
+++ b/pages/guide/advanced/sso.md
@@ -1,40 +1,18 @@
---
-title:
- en: Third-party single sign-on
- zh-CN: 单点登录
categories:
- guide
- advanced
top: 60
---
-## 1. Single sign-on client id { lang="en" }
+# 单点登录
-## 1. 单点登录客户端ID { lang="zh-CN" }
+## 1. 单点登录客户端ID
-::: en
-client ID.
-:::
-::: zh-CN
客户端ID。
-:::
-
-## 2. Single sign-on client secrets { lang="en" }
-
-## 2. 单点登录客户端秘钥 { lang="zh-CN" }
-::: en
-client secrets.
-::: warning matters needing attention
-
-1. Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
-2. Only one of the four types of single sign-on can be enabled temporarily. If you used other single sign-on methods before and then changed to a new single Unbind (just one click) and then bind the single sign-on method you want to use now.
-3. If you use **`GitHub,Microsoft,Google,DingTalk`**, you only need to fill in the client ID and secret key, and select the corresponding platform in the options.
- - If you use **`Casdoor`** the following parameters need to be filled in, just follow the tutorial to fill in
-
-:::
+## 2. 单点登录客户端秘钥
-::: zh-CN
客户端秘钥
::: warning 注意事项
@@ -48,9 +26,7 @@ client secrets.
:::
-## 3. Registration binding single sign-on { lang="en" }
-
-## 3. 注册绑定单点登录 { lang="zh-CN" }
+## 3. 注册绑定单点登录
##
@@ -66,20 +42,7 @@ client secrets.
##
-## 4. SSO automatically registers as an OpenList account { lang="en" }
-
-## 4. 单点登录自动注册为OpenList帐号 { lang="zh-CN" }
-
-::: en
-
-- **OpenList Version > **v3.22.1** New Features**
- Before using single sign-on to register as an OpenList account, we need to bind the single sign-on of OpenList first, the binding method is explained above
-- Supports the `five` single sign-on methods mentioned above
-- Do not use the default organization (**app-built-in**) directly, because all users in this organization are global administrator accounts
-- Except `CASDOOR`, you only need to fill in the` Client id` and the `Client secrets`and the newly added single login account registered as OpenList account configuration
-
-:::
-::: zh-CN
+## 4. 单点登录自动注册为OpenList帐号
- **OpenList 版本 > **v3.22.1** 新增功能**
在使用单点登录注册为OpenList帐号前,我们需要先将OpenList的单点登录进行绑定,绑定方法在上面有说明
@@ -87,77 +50,25 @@ client secrets.
- 如果使用`Casdoor`,请勿直接使用默认组织(**app-built-in**),因为这个组织内的用户都是全局管理员帐号
- 除了`Casdoor`其它的只需要填写`客户端ID`和`客户端秘钥`以及下面新增的单点登录帐号注册为OpenList帐号的配置
-:::
+### 4.1. SSO完整填写示例
-### 4.1. SSO Full Fill Demo { lang="en" }
-
-### 4.1. SSO完整填写示例 { lang="zh-CN" }
-
-::: en
-Please refer to the detailed description below for how to fill in, the schematic diagram is just a reference for filling in and not suitable for everyone’s user habits
-
-
-:::
-
-::: zh-CN
分别如何填写看下面的详细说明,示意图只是一个填写参考并不适合每个人的用户习惯

-:::
-### 4.2. SSO auto register { lang="en" }
+### 4.2. SSO自动注册
-### 4.2. SSO自动注册 { lang="zh-CN" }
-
-::: en
-If we want SSO single sign-on to be registered as an OpenList account, we need to enable this option before it can be used
-:::
-::: zh-CN
如果我们想让SSO单点登录注册为OpenList帐号我们需要打开这个选项才可以使用
-:::
-
-### 4.3. SSO default dir { lang="en" }
-
-### 4.3. SSO默认路径 { lang="zh-CN" }
-
-::: en
-That is to say, the default path used by the registered account is equivalent to the `Base path` in the OpenList user settings.
-It can be the root directory `/`, or the path `/path/test/Demo` specified by the user
+### 4.3. SSO默认路径
-
-:::
-::: zh-CN
也就是说注册的帐号默认使用的路径,相当于OpenList用户设置里面的`基本路径`
可以是根目录`/`,也可以是用户指定的路径`/path/test/Demo`

-:::
-
-### 4.4. SSO default permission { lang="en" }
-
-### 4.4. SSO默认权限 { lang="zh-CN" }
-
-::: en
-It is equivalent to which permissions are enabled by default for registered users, as shown below
-
-
-
-
-
-The default is 0, no permission is enabled
-
-If we need to enable some permissions during registration, we only need the sum of the numbers of different permissions.
-
-For example:
-1. We need to open the user's `WebDav reading` and `WebDav manage ` by default, that is 256+512=768, we just fill in `768` in the options
-2. If we need to open the three permissions of `Make dir or upload`, `Rename` and `Delete` by default when registering, then it is 8+16+128=152, we can fill in `152` in the background
- I won’t say much about the examples, just add the permissions you need
-
-:::
-::: zh-CN
+### 4.4. SSO默认权限
相当于注册的用户默认开通哪些权限,就如下面所示的

@@ -170,55 +81,8 @@ For example:
2. 如果我们需要注册时默认开通`创建目录或上传`和`重命名`和`删除`这三个权限 那就是8+16+128=152,我们在后台填写`152`即可
例子就不多说了,需要那个权限自己相加就可以
-:::
-
-### 4.5. Precautions and instructions { lang="en" }
-
-### 4.5. 注意事项以及说明 { lang="zh-CN" }
-
-::: en
-**4.1-There is already this user in the OpenList user database**
-
-| username | password | base\*path | role | permission | opt_secret | github_id | disabled | sso_id |
-| ------------------ | -------- | ---------- | ---- | ---------- | ---------- | --------- | -------- | ----------- |
-| anyi | FzdDfkmU | /test1 | 0 | 3 | | | 0 | |
-| anyi**\*dc188911** | RUCtgqCw | /test1 | 0 | 3 | | | 0 | **dc18891** |
-
-As shown in the above table, a string of redundant ids is added after the newly registered single sign-on user name
-
-This is because the same user already exists in the OpenList user database, so the sso_id is also added after the user name
-
-If your newly registered single sign-on user name does not exist in the OpenList user database, it will not add the sso_id after the name
-
-**4.2-What should I do if I don’t want the SSO account to be registered as an OpenList account?**
-
-Just turn `SSO auto register` off,This will not affect the use of accounts that have been registered using Sso
-
-**4.3-If I turn off the single sign-on option, what should I do with the account registered with Sso?**
+### 4.5. 注意事项以及说明
-Don't worry, after using single sign-on to register and log in to OpenList, log in in the background, and find `personal information` after logging in
-
-- You can modify **`username`** and **`password`** by yourself, save it after modification, so that you can log in with the OpenList account normally
-- At this time, you can click `Unbind Single Sign-On Platform`, you can unbind or not unbind, and the subsequent [**default path**](#sso-default-dir) and [**default permissions**](#sso-default-permission) of this user can only be modified by the administrator in the OpenList background user
-
-**4.4-Why is this error code displayed when using sso?**
-
-```json{3}
-{
- "code": 400,
- "message": "The single sign on platform is not bound to any users: record not found",
- "data": null
-}
-```
-
-This is because [Single Sign-On Automatic Registration](#sso-auto-register) is not enabled for the OpenList account, and the single sign-on cannot be registered as an OpenList account
-
-- If you are an administrator, you can turn it on
-
-- If you are a user, you can contact the administrator to enable
-
-:::
-::: zh-CN
**4.1-OpenList用户数据库已存在同名的帐号**
| username | password | base_path | role | permission | opt_secret | github_id | disabled | sso_id |
@@ -258,23 +122,8 @@ This is because [Single Sign-On Automatic Registration](#sso-auto-register) is n
- 如果你是管理员,你可以开启一下
- 如果你是用户,你可以去联系管理员开启
-:::
-
-## 5. Sso compatibility mode { lang="en" }
-
-## 5. SSO兼容模式 { lang="zh-CN" }
-
-::: en
-OpenList single -point login is bound to Dingtalk, and then opens OpenList in the **`Dingtalk`** application, When you log in, choose Dingtalk login and jump to your computer browser. After authorization, you find that there is no response, because the browser cannot jump to the Dingtalk application inner browser page
-
-At this time, you need to open the **`sso compatability mode`** again to click on the login to log in successfully
-
-**OpenList applied in Dingtalk and opened as shown in the figure:**
+## 5. SSO兼容模式
-
-
-:::
-::: zh-CN
OpenList单点登录绑定了钉钉,然后在 **`钉钉`** 应用内打开OpenList,登录时选择钉钉登录会跳到自己电脑浏览器,授权后你会发现没有后续反应了,因为浏览器无法跳回钉钉应用內浏览器页面
这时候就需要打开 **`SSO兼容模式`** 再去点击登录就可以登录成功了
@@ -283,66 +132,22 @@ OpenList单点登录绑定了钉钉,然后在 **`钉钉`** 应用内打开Open

-:::
-
-## 6. How to create the application in Dingtalk workbench { lang="en" }
-
-## 6. 如何创建钉钉工作台內应用 { lang="zh-CN" }
+## 6. 如何创建钉钉工作台內应用
-::: en
-A picture teaches you to create a new application and add it
-
-- LOGO is not modified when the newly -built newly built, you can wait for the newly built and then modify See_Figure_2
-- If you just browse OpenList in the Dingtalk application, you do n’t need a single -point login management, you do n’t need to set up a single -point login configuration, you can just add an application
- 
-
-:::
-::: zh-CN
一张图教你新建一个应用并且添加
- LOGO是默认的新建时不可修改,可以等新建好后再修改 (看图二)
- 如果你只是在钉钉应用內浏览OpenList,不使用单点登录后台管理,可以不用设置单点登录配置只添加应用就可以

-:::
-
-### 6.1. Modify the application logo { lang="en" }
-
-### 6.1. 修改应用LOGO { lang="zh-CN" }
+### 6.1. 修改应用LOGO
-::: en
-Open [**DingTalk open platform management**](https://open-dev.dingtalk.com/fe/app#/corp/app) Find your newly built app to modify the logo.
-
-
-
-:::
-::: zh-CN
打开 [**钉钉开放平台后台**](https://open-dev.dingtalk.com/fe/app#/corp/app) 找到你新建的应用进去修改LOGO就可以

-:::
-
-## 7. redirect url { lang="en" }
+## 7. 回调参数(重定向链接)
-## 7. 回调参数(重定向链接) { lang="zh-CN" }
-
-::: en
-After turning on **`Sso compatibility mode`** Then you need to log in to the corresponding software to modify the redirect url to change it to the two redirect url below
-
-- `GitHub` only needs to add one:`http(s)://You_Url/api/auth/sso_get_token`
-- `Microsoft` and` Google` both need to be added, you can add multiple Redirect urls, so you only need to add two Redirect URLs.
-
-```
-http(s)://You_Url/api/auth/get_sso_id
-http(s)://You_Url/api/auth/sso_get_token
-```
-
-If you enable the **Sso compatibility mode** if you do not modify it, you will prompt `Invalid Redirect URL` Error
-
-:::
-
-::: zh-CN
开启 **`SSO兼容模式`** 后需要将单点登录对应的软件内修改一下回调参数链接改成下面的两个回调参数
- `GitHub` 只需要添加一条:`http(s)://You_Url/api/auth/sso_get_token`
@@ -354,5 +159,3 @@ http(s)://You_Url/api/auth/sso_get_token
```
如果启用 SSO兼容模式 不修改则会提示 `invalid redirect url` 错误
-
-:::
diff --git a/pages/guide/advanced/sso/01-GitHub.md b/pages/guide/advanced/sso/01-GitHub.md
index bb5b8e6f9..aa22614d1 100644
--- a/pages/guide/advanced/sso/01-GitHub.md
+++ b/pages/guide/advanced/sso/01-GitHub.md
@@ -1,45 +1,12 @@
-### 3.1. Github { lang="en" }
+### 3.1. GitHub
-::: en
-::: warning
-If you want to use GitHub to log in, you first need the machine you built OpenList to be able to connect to GitHub before you can call and use it, otherwise you cannot use it if the link is not connected
-:::
-::: en
-Open **https://github.com/settings/developers** Click **`New OAuth App`**
-:::
-
-### 3.1. GitHub { lang="zh-CN" }
-
-::: zh-CN
::: warning
若想使用GitHub登录,首选需要你搭建OpenList的机器能连接访问GitHub才可以调用使用,不然连接不上无法使用
:::
-::: zh-CN
-打开 **https://github.com/settings/developers** 点击 **`New OAuth App`**
-:::
-
-#### 3.1.1. Register OAuth Instructions { lang="en" }
-
-#### 3.1.1. Register OAuth 填写说明 { lang="zh-CN" }
-
-::: en
-
-- Application name
- - Write whatever you want to call it
-- **Homepage URL**
- - home URL address
- - Both **http** and **https** can be used
-- Application description
- - write whatever you want
-- **Authorization callback URL**
- - Callback URL address
- - **https://your_domain/api/auth/sso_callback** - Both **http** and **https** can be used
- Remember to get **Client secrets** after filling it out, and then fill it in the OpenList background.
- Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
-:::
+打开 **https://github.com/settings/developers** 点击 **`New OAuth App`**
-::: zh-CN
+#### 3.1.1. Register OAuth 填写说明
- Application name
- 随便写想叫什么叫什么
@@ -53,21 +20,10 @@ Open **https://github.com/settings/developers** Click **`New OAuth App`**
- **https://你的域名/api/auth/sso_callback** - 可以使用http https都可以
填写完毕后记得获取一下 **Client secrets**,然后填写到OpenList后台。
-:::
-
-#### 3.1.2. Completely fill in the reference schematic { lang="en" }
-
-#### 3.1.2. 完整填写参考示意图 { lang="zh-CN" }
+#### 3.1.2. 完整填写参考示意图
-::: en
-
-:::
-::: zh-CN

-:::
-
-#### 3.1.3. GitHub login Video Tutorials { lang="en" }
-#### 3.1.3. GitHub视频教程 { lang="zh-CN" }
+#### 3.1.3. GitHub视频教程
diff --git a/pages/guide/advanced/sso/02-Dingtalk.md b/pages/guide/advanced/sso/02-Dingtalk.md
index 4f510f010..428ecee39 100644
--- a/pages/guide/advanced/sso/02-Dingtalk.md
+++ b/pages/guide/advanced/sso/02-Dingtalk.md
@@ -1,30 +1,4 @@
-### 3.2.Dingtalk { lang="en" }
-
-### 3.2.钉钉 { lang="zh-CN" }
-
-::: en
-First open **https://open-dev.dingtalk.com/fe/app#/corp/app**
-
-In the upper right corner, first select `New Application`, select `H5 Micro Application` as the type, fill in the content by yourself and click Confirm to create
-
-Click on the new application and we will see the application credentials option, where `AppKey` is the client ID, and `AppSecret` is the client secret key
-
-- Just fill in the corresponding parameters in the OpenList background single sign-on
- Go to the left column and find `Login and Share` \*\*Fill in the callback parameters `http://127.0.0.1:5234/api/auth/sso_callback`
-
-```bash title="Callback" parameter example
-http://127.0.0.1:5244/api/auth/sso_callback
-```
-
-- Note: I used the callback parameter here for local testing. http://127.x When you use it, Write **http(s):\//your own domain name/api/auth/sso_callback** when filling in and using it by yourself
-
- Write the callback parameters well. Let’s go to the left column and find `Privilege Management`, find **`Personal Information Read Permission of Address Book`** and click to authorize
-
- Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
-
-:::
-
-::: zh-CN
+### 3.2.钉钉
首先打开 **https://open-dev.dingtalk.com/fe/app#/corp/app**
@@ -46,15 +20,6 @@ http://127.0.0.1:5244/api/auth/sso_callback
OpenList 后台参数也记得写好保存,写好保存后也要回到个人资料下方会有一个需要绑定的按钮进行绑定,否则无法使用
-:::
-
-#### 3.2.1. Completely fill in the reference schematic { lang="en" }
+#### 3.2.1. 完整填写参考示意图
-#### 3.2.1. 完整填写参考示意图 { lang="zh-CN" }
-
-::: en
-
-:::
-::: zh-CN

-:::
diff --git a/pages/guide/advanced/sso/03-Microsoft.md b/pages/guide/advanced/sso/03-Microsoft.md
index 982b42aa1..9615a1614 100644
--- a/pages/guide/advanced/sso/03-Microsoft.md
+++ b/pages/guide/advanced/sso/03-Microsoft.md
@@ -1,38 +1,5 @@
-### 3.3. Microsoft { lang="en" }
+### 3.3. 微软
-### 3.3. 微软 { lang="zh-CN" }
-
-::: en
-First open **https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade**
-
-Then register to create an application, I won't say much here, you can see the complete schematic diagram
-
-Account type must be selected: **Account in any organizational directory (any Azure AD directory - multi-tenant)**
-
-Microsoft callback parameters: must start with "HTTPS" or "http://localhost (I used localhost here for local testing)
-
-```bash title="Callback" parameter example
-http://localhost:5244/api/auth/sso_callback?method=sso_get_token
-http://localhost:5244/api/auth/sso_callback?method=get_sso_id
-```
-
-- Write **http(s):\//your own domain name/api/auth/sso_callback?method=sso_get_token** when filling in and using it by yourself
-
-- Write **http(s):\//your own domain name/api/auth/sso_callback?method=get_sso_id** when filling in and using it by yourself
-
-- Note: When adding a redirect URL to a new application, only one can be added. After the application is registered and registered, click on the application to see the options behind the redirect URI
-
- After filling it out, we click `Certificate and Password` on the left column to create a new `Client Password` to get our client secret key
-
-- After the client password is created, the **`value`** parameter is our `client key`, remember to save it, it will not appear again if it appears once, if you don’t save it in time, just create a new client password
-
- The client ID is in `Overview` at the top of the left column, find the application (client) ID, which is the client ID we need to fill in the OpenList
-
-- We have got the client ID and secret key and fill them in the OpenList single sign-on configuration.
- Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
-
-:::
-::: zh-CN
首先打开 **https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade**
然后注册创建应用,我这里就不多说了可以看完整示意图
账户类型必须选择:**任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户**
@@ -59,15 +26,6 @@ http://localhost:5244/api/auth/sso_callback?method=get_sso_id
OpenList 后台参数也记得写好保存,写好保存后也要回到个人资料下方会有一个需要绑定的按钮进行绑定,否则无法使用
-:::
-
-#### 3.3.1. Completely fill in the reference schematic { lang="en" }
+#### 3.3.1. 完整填写参考示意图
-#### 3.3.1. 完整填写参考示意图 { lang="zh-CN" }
-
-::: en
-
-:::
-::: zh-CN

-:::
diff --git a/pages/guide/advanced/sso/04-Google.md b/pages/guide/advanced/sso/04-Google.md
index 08c0f9e97..0c1db5d35 100644
--- a/pages/guide/advanced/sso/04-Google.md
+++ b/pages/guide/advanced/sso/04-Google.md
@@ -1,41 +1,8 @@
-### 3.4. Google { lang="en" }
+### 3.4. 谷歌
-### 3.4. 谷歌 { lang="zh-CN" }
-
-::: en
-::: warning
-If you want to use Google to log in, you first need the machine you built OpenList to be able to connect to Google before you can call and use it, otherwise you cannot use it if the link is not connected
-:::
-
-::: en
-
-1. First open **https://console.cloud.google.com/projectselector2/apis/dashboard?hl=zh-cn**
-2. If you are using it for the first time, you need to create a new project first (just write whatever you want, skip it if it has already been created)
-3. Then configure the [consent screen](#agree-to-screen-configuration) (there is a separate instruction on how to configure the document, if it is already configured, skip it)
-4. After configuring the unified screen, we click the credentials on the left, create credentials, and select OAuth client ID
-
-- Application Type Select Web Application, and write the name as you like
-- Then add our two callback parameters in the authorized redirect URI
-
-```bash title="Callback" parameter example
-http://127.0.0.1:5244/api/auth/sso_callback?method=get_sso_id
-http://127.0.0.1:5244/api/auth/sso_callback?method=sso_get_token
-```
-
-- Write **http(s):\//your own domain name/api/auth/sso_callback?method=get_sso_id** when filling in and using it by yourself
-- Write **http(s):\//your own domain name/api/auth/sso_callback?method=sso_get_token** when filling in and using it by yourself
- After filling it out, click Create to get the OAuth client ID and secret key
-- (It doesn't matter if you accidentally close it here, just click on the name of the application we created and enter it in the upper right position to see it)
- We have got the client ID and secret key and fill them in the OpenList single sign-on configuration.
- Remember to write and save the background parameters of OpenList. After writing and saving, you have to go back to the bottom of the personal data and there will be a button that needs to be bound, otherwise it cannot be used
-
-:::
-
-::: zh-CN
::: warning
若想使用Google登录,首选需要你搭建OpenList的机器能连接访问Google才可以调用使用,不然连接不上无法使用
:::
-::: zh-CN
1. 首先打开 **https://console.cloud.google.com/projectselector2/apis/dashboard?hl=zh-cn**
2. 如果是第一次使用需要先新建一个项目(随便写就行,如果已创建跳过)
@@ -57,32 +24,13 @@ http://127.0.0.1:5244/api/auth/sso_callback?method=sso_get_token
客户端ID和秘钥我们都拿到了填写到OpenList单点登录配置里面去即可
OpenList 后台参数也记得写好保存,写好保存后也要回到个人资料下方会有一个需要绑定的按钮进行绑定,否则无法使用
-:::
-
-#### 3.4.1. Agree to screen configuration { lang="en" }
-
-#### 3.4.1. 同意屏幕配置 { lang="zh-CN" }
+#### 3.4.1. 同意屏幕配置
-::: en
-If it has been configured, just ignore this picture (you can zoom in if you can’t see it clearly)
-
-
-
-:::
-::: zh-CN
如已配置好 忽略本图即可(如果看不清楚可以放大)



-:::
-
-#### 3.4.2. Completely fill in the reference schematic { lang="en" }
-#### 3.4.2. 完整填写参考示意图 { lang="zh-CN" }
+#### 3.4.2. 完整填写参考示意图
-::: en

-:::
-::: zh-CN
-
-:::
diff --git a/pages/guide/advanced/sso/05-Casdoor.md b/pages/guide/advanced/sso/05-Casdoor.md
index 779ce97d4..dd110b0b0 100644
--- a/pages/guide/advanced/sso/05-Casdoor.md
+++ b/pages/guide/advanced/sso/05-Casdoor.md
@@ -1,31 +1,5 @@
-### 3.5. Casdoor { lang="en" }
+### 3.5. Casdoor
-### 3.5. Casdoor { lang="zh-CN" }
-
-::: en
-What is `Casdoor`? Yes, you can use other OAuth applications to log in. [**Self-deployment**](https://casdoor.org/docs/basic/server-installation) is open source and free, and official hosting requires payment.
-
-Now, Casdoor supports many OAuth application providers, as many as dozens of kinds, you have seen and not seen
-
-**GitHub open source link: https://github.com/casdoor/casdoor**
-
-After we enter `Casdoor`, we first create **Organization**1, **Token**2, **Application**3, **User**4
-
-Do not use the default organization (**app-built-in**) directly, because all users in this organization are global administrator accounts
-
-Then fill in the `OpenList` backstage single sign-on option one by one. The user’s parameters are ignored for the time being. They are filled in when the personal data is bound to the single sign-on.
-
-
-
-After filling in the above parameters, we come to the personal data and click `Bind point single sign-on platform` to bind
-
-Then the `Casdoor` window will pop up, we can enter our registered user name
-
-
-
-:::
-
-::: zh-CN
`Casdoor` 是什么? 是可以使用其他 OAuth 应用程序登录,[**自行部署**](https://casdoor.org/zh/docs/basic/server-installation)开源免费,使用他们官方托管是需要付费的。
现在,Casdoor 支持许多OAuth 应用程序提供者,多达几十种,你见过的没见过的都有
@@ -46,30 +20,12 @@ Then the `Casdoor` window will pop up, we can enter our registered user name

-:::
-
-#### 3.5.1. Access some other vendors on Casdoor { lang="en" }
-
-#### 3.5.1. 在Casdoor接入一些其他的厂商 { lang="zh-CN" }
-
-::: en
-In addition to the four that `OpenList` has already connected to `GitHub Dingding Google Microsoft`, it is also connected to `QQ Baidu Feishu WeChat/Enterprise WeChat Douyin Bilibili` and so on, all [**click Check out all the manufacturers that can be accessed here**](https://casdoor.org/docs/provider/oauth/overview), of course, the four that `OpenList` has already accessed can also be added to `Casdoor`
-
-**View detailed tutorials on accessing other providers: [https://anwen-anyi.github.io/index/09-ssologin.html](https://anwen-anyi.github.io/index/09-ssologin.html)**
-:::
-::: en
-::: details Direct iframe viewing
-
-
-
-:::
+#### 3.5.1. 在Casdoor接入一些其他的厂商
-::: zh-CN
除了现在`OpenList`已经接入的 `GitHub 钉钉 谷歌 微软 `这四个除外还接入`QQ 百度 飞书 微信/企业微信 抖音 哔哩哔哩`等等等个,全部的[**点击这里查看全部可以接入的厂商**](https://casdoor.org/zh/docs/provider/oauth/overview),当然了`OpenList`已经接入的四个也是可以添加到`Casdoor`
**查看详细接入其它提供商教程: [https://anwen-anyi.github.io/index/09-ssologin.html](https://anwen-anyi.github.io/index/09-ssologin.html)**
-::: zh-CN
::: details 直接 iframe 查看
diff --git a/pages/guide/advanced/sso/06-Authentik.md b/pages/guide/advanced/sso/06-Authentik.md
index a067e4d37..99f822bb7 100644
--- a/pages/guide/advanced/sso/06-Authentik.md
+++ b/pages/guide/advanced/sso/06-Authentik.md
@@ -1,46 +1,6 @@
### 3.6. Authentik
-#### 3.6.1. Authentik Setup { lang="en" }
-
-#### 3.6.1. Authentik 设置 { lang="zh-CN" }
-
-:::en
-**Create a Provider for OpenList**
-
-1. Menu -> Applications -> Providers -> Create
-2. Select `OAuth2/OpenID Provider` and click next
-3. Enter an application name, this guide assumes you will call the provider `OpenList`
-4. Select your authorization flow. The built-in `default-provider-authorization-implicit-consent` is acceptable
-5. Make note of the `Client ID` and `Client Secret` fields as provided by Authentik - save these values for later
-6. For Redirect UDIs/Origins, enter the following, replacing [your.openlist.domain] with the FQDN for your OpenList installation:
-
-```bash title="Callback" parameters
-https://your.openlist.domain/api/auth/sso_callback\?method=sso_get_token
-https://your.openlist.domain/api/auth/sso_callback\?method=get_sso_id
-```
-
- Please note the \ character before ? as an escape character for the regex used for this URI is mandatory.
-
-7. Make note of the signing key selected as you will need it later. This guide assumes you will use the default `authentik Self-signed Certificate`
-8. Save the new provider
-
-**Create an Application for OpenList**
-
-1. Menu -> Applications -> Application -> Create
-2. Enter an application name, recommended `OpenList`
-3. An application slug of `openlist` will be automatically selected for you. This guide assumes you will keep this value
-4. Select the provider by name you selected in Provider Setup step 3 - `OpenList`
-5. Save the new application
-
-**Retrieve the JWT certificate**
-
-1. Menu -> System -> Certificates
-2. Select the `>` next to the `authentik Self-signed Certificate`. If you chose another certificate for the application, select that certificate instead
-3. Click Download Certificate to get a copy of the public JWT key
-
-:::
-
-::: zh-CN
+#### 3.6.1. Authentik 设置
**为 OpenList 创建提供程序**
@@ -77,29 +37,7 @@ https://your.openlist.domain/api/auth/sso_callback\?method=get_sso_id
2. 选择 `>` 旁边的 `authentik 自签名证书`。如果你为应用选择了其他证书,选择该证书
3. 点击“下载证书”以获取公共 JWT 密钥的副本
-:::
-
-#### 3.6.2. OpenList Setup { lang="en" }
-
-#### 3.6.2. OpenList 设置 { lang="zh-CN" }
-
-::: en
-
-- **Sso login enabled:** `yes`
-- **Sso login platform:** `OIDC`
-- **Sso client id:** [Client ID from Authentik]
-- **Sso client secret:** [Client Secret from Authentik]
-- **Sso oidc username key:** `preferred_username`
-- **Sso organization name:** `user`
-- **Sso application name:** `user`
-- **Sso endpoint name:** `https://your.authentik.domain/application/o/openlist/`
- - **Note:** Replace [your.authentik.domain] with the FQDN for your Authentik installation. Mind the trailing `/` at the end of the path. If you chose a different application slug in Authentik Application setup 3, substitute that here
-- **Sso jwt public key:** Open the certificate file downloaded in step 3.3 of the Authentik Application setup and paste the contents here. It will start with `-----BEGIN CERTIFICATE-----`
-- **Sso compatability mode:** `no`
-
-:::
-
-::: zh-CN
+#### 3.6.2. OpenList 设置
- **启用 SSO 登录:** `是`
- **SSO 登录平台:** `OIDC`
@@ -113,5 +51,3 @@ https://your.openlist.domain/api/auth/sso_callback\?method=get_sso_id
- **SSO JWT 公钥:** 打开在 Authentik 应用程序设置第 3.3 步中下载的证书文件,并将内容粘贴在此处。它以 `-----BEGIN CERTIFICATE-----` 开头
- **SSO 兼容模式:** `否`
-
-:::
diff --git a/pages/guide/advanced/sso/07-keycloak.md b/pages/guide/advanced/sso/07-keycloak.md
index 3ac32b091..9ba1df253 100644
--- a/pages/guide/advanced/sso/07-keycloak.md
+++ b/pages/guide/advanced/sso/07-keycloak.md
@@ -1,164 +1,77 @@
### 3.7. Keycloak
-::: zh-CN
Keycloak 通过 OIDC(OpenID Connect)协议实现与 OpenList 的单点登录对接,可以作为 OpenList 的身份提供者,下面是配置步骤。
-:::
-::: en
-Keycloak is integrated via the OIDC (OpenID Connect) protocol and can serve as an identity provider for OpenList. The steps below explain how to configure Keycloak for OpenList SSO.
-:::
-#### 3.7.1. Keycloak 设置 { lang="zh-CN" }
+#### 3.7.1. Keycloak 设置
-#### 3.7.1. Keycloak Setup { lang="en" }
-
-##### 3.7.1.1. Create Realm { lang="en" }
-
-##### 3.7.1.1. 新建 Realm { lang="zh-CN" }
-
-::: zh-CN
+##### 3.7.1.1. 新建 Realm
- 登录到 Keycloak 管理控制台。
- 在左侧导航栏点击 `Manage realms`,选择`Create Realm`新建领域,或选用现有领域。
-:::
-::: en
-
-- Log in to the Keycloak admin console.
-- Click `Manage realms` in the left navigation bar, select `Create Realm` to create a new realm or use an existing one.
-
-:::
-
-##### 3.7.1.2. Create Client { lang="en" }
-
-##### 3.7.1.2. 新建 Client { lang="zh-CN" }
+##### 3.7.1.2. 新建 Client
-::: zh-CN
选择领域后,在左侧菜单中找到 `Clients`并且进入该页面,点击`Create Client`。
-:::
-::: en
-After selecting the realm, click `Clients` → `Create Client`.
-:::
- **General settings**

- ::: en
- ::: details see the details
- |Name|Value|
- -|----
- |Client type|OpenID Connect|
- |Client ID| OpenList (or any name you prefer)|
- |Name| OpenList (or any name you prefer)|
- |Description| optional|
- |Always display in UI| select as needed|
-
- :::
-
- ::: zh-CN
::: details 查看详情
- |配置名|配置值|
- -|----
- |客户端类型|OpenID Connect|
- |客户端ID| OpenList(或你喜欢的任何名称)|
- |名称| OpenList(或你喜欢的任何名称)|
- |描述| 可选|
- |始终在 UI 中显示| 根据需要选择|
+
+ | 配置名 | 配置值 |
+ | ---------------- | ------------------------------ |
+ | 客户端类型 | OpenID Connect |
+ | 客户端ID | OpenList(或你喜欢的任何名称) |
+ | 名称 | OpenList(或你喜欢的任何名称) |
+ | 描述 | 可选 |
+ | 始终在 UI 中显示 | 根据需要选择 |
:::
- **Capability config**

- ::: zh-CN
+
::: details 查看详情
- |配置名|配置值|
- -|----
- Client authentication| On|
- Authorization| Off|
- Authentication flow|`Standard Flow`,`Service account roles`|
- PKCE Method | 留空|
- Require DPoP bound tokens | Off|
- :::
- ::: en
- ::: details see the details
- |Name|Value|
- -|----
- Client authentication| On|
- Authorization| Off|
- Authentication flow|`Standard Flow`,`Service account roles`|
- PKCE Method | Leave blank|
- Require DPoP bound tokens | Off|
+ | 配置名 | 配置值 |
+ | ------------------------- | ---------------------------------------- |
+ | Client authentication | On |
+ | Authorization | Off |
+ | Authentication flow | `Standard Flow`,`Service account roles` |
+ | PKCE Method | 留空 |
+ | Require DPoP bound tokens | Off |
:::
- **Login settings**

- ::: zh-CN
+
::: details 查看详情
- |配置名|配置值|
- -|----
- Root URL |留空
- Home URL |填入你OpenList的访问地址,如:https://your.openlist.domain
- Valid redirect URIs|`https://your.openlist.domain/api/auth/sso_callback?method=get_sso_id` `https://your.openlist.domain/api/auth/sso_callback?method=sso_get_token` `https://your.openlist.domain/api/auth/sso_get_token` `https://your.openlist.domain/api/auth/get_sso_id`
- Valid post logout redirect URIs|留空
- Web origins |留空
- :::
- ::: en
- ::: details see the details
- |Name|Value|
- -|----
- Root URL |Leave blank
- Home URL |Enter your OpenList access address, e.g.: https://your.openlist.domain
- Valid redirect URIs|`https://your.openlist.domain/api/auth/sso_callback?method=get_sso_id` `https://your.openlist.domain/api/auth/sso_callback?method=sso_get_token` `https://your.openlist.domain/api/auth/sso_get_token` `https://your.openlist.domain/api/auth/get_sso_id`
- Valid post logout redirect URIs|Leave blank
- Web origins |Leave blank
+ | 配置名 | 配置值 |
+ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | Root URL | 留空 |
+ | Home URL | 填入你OpenList的访问地址,如:https://your.openlist.domain |
+ | Valid redirect URIs | `https://your.openlist.domain/api/auth/sso_callback?method=get_sso_id` `https://your.openlist.domain/api/auth/sso_callback?method=sso_get_token` `https://your.openlist.domain/api/auth/sso_get_token` `https://your.openlist.domain/api/auth/get_sso_id` |
+ | Valid post logout redirect URIs | 留空 |
+ | Web origins | 留空 |
:::
-##### 3.7.1.3. 获取JWT公钥 { lang="zh-CN" }
-
-##### 3.7.1.3. Retrieve JWT public key { lang="en" }
-
-::: zh-CN
+##### 3.7.1.3. 获取JWT公钥
- 在左侧找到 `Clients`,选择刚创建的 Client 进入设置页面。
- 在 Client 设置页面,切换到 `Keys` 选项卡。
- 在 `Public Key` 字段中复制公钥内容,稍后在 OpenList 配置中使用。
- 如果没有看到公钥,可以点击 `Generate RSA Keys` 生成
-:::
-::: en
-
-- In the left menu, find `Clients`, select the newly created Client to enter the settings page.
-- In the Client settings page, switch to the `Keys` tab.
-- Copy the content in the `Public Key` field for later use in OpenList configuration.
-- If the public key is not visible, click `Generate RSA Keys` to generate it.
-
-:::
-
-##### 3.7.1.4. 获取Client Secret { lang="zh-CN" }
-
-##### 3.7.1.4. Retrieve Client Secret { lang="en" }
-
-::: zh-CN
+##### 3.7.1.4. 获取Client Secret
- 在 Client 设置页面,切换到 `Credentials` 选项卡。
- 在 `Client Secret` 字段中复制客户端密钥内容,稍后在 OpenList 配置中使用。
-:::
-::: en
-
-- In the Client settings page, switch to the `Credentials` tab.
-- Copy the content in the `Client Secret` field for later use in OpenList configuration.
-
-:::
+#### 3.7.2. OpenList 设置
-#### 3.7.2. OpenList 设置 { lang="zh-CN" }
-
-#### 3.7.2. OpenList Setup { lang="en" }
-
-::: zh-CN
在 OpenList 的单点登录配置填写如下参数:
- **启用 SSO 登录**:`是`
@@ -176,24 +89,3 @@ After selecting the realm, click `Clients` → `Create Client`.
如有特殊需求,根据实际 Keycloak 部署调整 claims 和端点。
详细操作请参考 [Keycloak 官方 OIDC 文档](https://www.keycloak.org/documentation)。
-
-:::
-
-::: en
-Fill in the following parameters in OpenList's SSO configuration:
-
-- **SSO login enabled:** `yes`
-- **SSO login platform:** `OIDC`
-- **SSO client id:** Keycloak Client ID (from [Create Client](#_3-7-1-2-create-client) above)
-- **SSO client secret:** Keycloak Client Secret (from [Retrieve Client Secret](#_3-7-1-4-retrieve-client-secret) above)
-- **SSO oidc username key:** `preferred_username` or as per your Mapper settings
-- **SSO organization name:** `master` (from [Create Realm](#_3-7-1-1-create-realm) above)
-- **SSO application name:** `OpenList` (from [Create Client](#_3-7-1-2-create-client) above)
-- **SSO endpoint name:** `https://your.keycloak.domain/realms/{realm-name}` (where realm-name matches the organization name)
-- **SSO jwt public key:** from [Retrieve JWT public key](#_3-7-1-3-retrieve-jwt-public-key) above
-- **SSO auto register as OpenList account:** Enable as needed
-- **SSO compatibility mode:** `no` (enable if compatibility is required)
-
-Adjust claims and endpoints based on your specific Keycloak deployment if needed.
-For detailed operations, refer to the [Keycloak official OIDC documentation](https://www.keycloak.org/documentation).
-:::
diff --git a/pages/guide/advanced/strm.md b/pages/guide/advanced/strm.md
index 582af8c29..ac54765d9 100644
--- a/pages/guide/advanced/strm.md
+++ b/pages/guide/advanced/strm.md
@@ -1,11 +1,10 @@
---
-title:
- en: Generate Strm
- zh-CN: 生成 strm
categories:
- guide
- advanced
top: 10
---
+# 生成 strm
+
diff --git a/pages/guide/advanced/user.md b/pages/guide/advanced/user.md
index f4093073b..9b3a99595 100644
--- a/pages/guide/advanced/user.md
+++ b/pages/guide/advanced/user.md
@@ -1,53 +1,24 @@
---
-title:
- en: User
- zh-CN: 用户
categories:
- guide
- advanced
top: 140
---
-## Add user { lang="en" }
+# 用户
-## 添加用户 { lang="zh-CN" }
+## 添加用户
-::: en
-::: warning Security Notice
-Adding a user may expose files and server-side capabilities to another account. Use a strong, unique password, grant only the minimum required permissions, and create accounts only for trusted users. Security incidents resulting from improper user or permission management are the administrator's responsibility.
-:::
-::: zh-CN
::: warning 安全提醒
添加用户可能会使其他账户获得文件和服务器侧功能的访问能力。请使用强且唯一的密码,仅授予必要的最小权限,并仅为可信用户创建账户。因用户或权限管理不当而导致的安全事件,由管理员用户承担责任。
:::
-## Username { lang="en" }
-
-## 用户名 { lang="zh-CN" }
+## 用户名
-::: en
-Username for login.
-:::
-::: zh-CN
登录用户名。
-:::
-
-## Password { lang="en" }
-
-## 密码 { lang="zh-CN" }
-
-::: en
-Password for login.
-:::tip
-Password is invalid for guest user.
-
-If you enter an incorrect password 6 times in a row, the current IP will be blocked for 30 minutes and you will not be able to enter your account and password to log in. However, it will not affect other IPs. It will only target IPs that entered 6 incorrect passwords.
-- Restarting will immediately remove the 30-minute ban time
+## 密码
-:::
-
-::: zh-CN
登录密码。
:::tip
密码对游客是无效的。
@@ -58,53 +29,15 @@ If you enter an incorrect password 6 times in a row, the current IP will be bloc
:::
-## Base path { lang="en" }
-
-## 基本路径 { lang="zh-CN" }
-
-::: en
-The root path that users see when he/she log in.
+## 基本路径
-Q: **How to allow a user to see multiple folder paths?**
-
-A: You can create a new [alias](alias.md) storage, add all the paths you need to show the user to the alias, and then point to the newly created alias storage in the user path
-:::
-::: zh-CN
用户登录时看到的根路径。
Q:**如何否允许一个用户可以看到多个文件夹路径?**
A:可以新建一个[别名](alias.md)存储,将你需要给用户展示的路径都添加到别名,然后在用户路径这里指向新建的别名存储。
-:::
-
-## Permission { lang="en" }
-
-## 权限 { lang="zh-CN" }
-
-::: en
-
-- Can see hides: Can see the hides files and folders
-- Access without password: Can access without password
-- Add offline download tasks: Add offline download tasks
- - ⚠️ Granting a user remote file read/write permissions also grants them the ability to access resources from the server's network context, including internal network addresses. Only grant this permission to fully trusted users. Internal network access resulting from improper permission assignment is not considered a security vulnerability.
-- Mkdir or upload: Can make directory or upload files
-- Rename: Can rename files and folders
-- Move: Can move files and folders
-- Copy: Can copy files and folders
-- Delete: Can delete files and folders
-- Webdav read: Can read files and folders with webdav
-- Webdav manage: Can manage files and folders with webdav
-- FTP read: Can read files and folders with FTP
-- FTP manage: Can manage files and folders with FTP
-- Read archives: Read the contents of the file in the compressed package
- - After turning on this option, compressed package format files will be previewed by default (as shown in the figure below), which will consume some server traffic, but will not download them all.
- - If you want to turn off the preferred preview of the compressed format, **Manage => Setting => Preview by default when opening archives**, this option is turned off, and the preference is the download mode
-- Decompress: Decompress compressed package files online
- 
- 
-:::
-::: zh-CN
+## 权限
- 可以看到隐藏:可以看到隐藏的文件和文件夹
- 无密码访问:无需密码即可访问
@@ -126,37 +59,11 @@ A:可以新建一个[别名](alias.md)存储,将你需要给用户展示的路


-:::
-
-## Disabled { lang="en" }
+## 停用
-## 停用 { lang="zh-CN" }
-
-::: en
-After checking, this user will stop using it and cannot log in. The guest account is disabled by default. If you want to enable the guest account, please close it manually.
-:::
-::: zh-CN
勾选后将停止使用此用户,无法登陆,游客账户默认停用,如果要启用游客账户请手动关闭停用。
-:::
-
-## Tips { lang="en" }
-## Tips { lang="zh-CN" }
-
-::: en
-
-1. Are you worried that visitors can see all files? [**Click to see how to set it up here**](../../faq/why.md#how-do-i-set-it-so-that-visitors-can-only-see-the-content-after-logging-in)
-2. **`Guest user is disabled, login please`**: In order to protect your OpenList security, the guest access permission is closed, if you need guest access, open it yourself
- - OpenList Manage --> users --> `guest` --> **Disable** uncheck
-3. Question about **`Copy/Upload`**
- - If you upload (including offline download and upload) large files, or upload a lot of files (hundreds or thousands), it is not recommended to use OpenList to operate, please go to the corresponding network disk official website to operate directly
-4. Non-admin users can manage offline download, copy, upload and other operations in the background
- - OpenList needs to be upgraded to version, and admin can also view the user's task progress and operations
- 
-
-:::
-
-::: zh-CN
+## Tips
1. 你是否在为游客能看到全部文件而发愁?[**点击查看这里如何设置**](../../faq/why.md#%E6%83%B3%E8%AE%A9%E6%B8%B8%E5%AE%A2%E7%99%BB%E5%BD%95%E5%90%8E%E6%89%8D%E8%83%BD%E7%9C%8B%E5%88%B0%E5%86%85%E5%AE%B9%E6%80%8E%E4%B9%88%E8%AE%BE%E7%BD%AE)
2. **`Guest user is disabled, login please`**:为了保护您的 OpenList 安全,游客访问权限关闭了,若需要游客访问自行打开
@@ -166,5 +73,3 @@ After checking, this user will stop using it and cannot log in. The guest accoun
4. 非 admin 权限用户在后台管理离线下载、复制、上传等操作
- 需要OpenList升级到版本,同时 admin 也可以查看用户的任务进度以及操作

-
-:::
diff --git a/pages/guide/advanced/webdav.md b/pages/guide/advanced/webdav.md
index 130cfe75e..73368cf80 100644
--- a/pages/guide/advanced/webdav.md
+++ b/pages/guide/advanced/webdav.md
@@ -1,42 +1,17 @@
---
-title:
- en: WebDAV
- zh-CN: WebDAV
categories:
- guide
- advanced
top: 50
---
-::: en
-WebDAV (Web Distributed Authoring and Versioning) is a set of extensions to the Hypertext Transfer Protocol (HTTP) that enables users to collaboratively create, edit, and manage files directly on a web server.
+# WebDAV
-OpenList can be served as a WebDAV server, allowing users to access and modify files through a web interface.
-:::
-::: zh-CN
WebDAV(Web 分布式创作和版本控制)是一种扩展超文本传输协议(HTTP)的协议,它允许用户使用 Web 服务器上的文件。
OpenList 可以作为 WebDAV 服务器,允许用户通过 Web 界面访问和修改网盘内的文件。
-:::
-
-## Permission Configuration Instructions { lang="en" }
-
-## 权限配置说明 { lang="zh-CN" }
-
-::: en
-
-To enable a specific user to use WebDAV, the following permissions must be enabled in the `User => Permissions` settings:
-
-1. **WebDAV Read**
- - This permission must be enabled to **view and read** files and directories in WebDAV.
- - If the user **only needs to view or play files**, enabling this permission is sufficient.
-2. **WebDAV Management**
- - This permission must be enabled to perform **write operations** (such as create, modify, delete, etc.).
- - **Enabling only `WebDAV Management` is not enough!** You must also enable `WebDAV Management` **as well as** the specific file system permissions required for the planned operations (such as `rename`, `delete`, `copy`, `create directories or upload`, etc.).
-
-:::
-::: zh-CN
+## 权限配置说明
要使特定用户能够使用 WebDAV,需在 `用户 => 权限` 设置中为其开启以下权限:
@@ -48,28 +23,7 @@ To enable a specific user to use WebDAV, the following permissions must be enabl
- 必须开启此权限才能进行**写入操作**(创建、修改、删除等)。
- **仅开启 `WebDAV 管理` 还不够!** 需要同时开启 `WebDAV 管理` **以及** 其计划执行操作所需的具体文件系统权限(如 `重命名`、`删除`、`复制`、`创建目录或上传` 等)。
-:::
-
-## Basic Connection Configuration { lang="en" }
-
-## 基础连接配置 { lang="zh-CN" }
-
-::: en
-
-Use the following parameters to connect your WebDAV client:
-
-| Configuration Item | Value / Description |
-| ------------------ | --------------------------------------------------------------------------------------- |
-| **Url** | `http[s]://your-domain:port/dav/` |
-| **Host** | Your domain (e.g., `openlist.example.com`) |
-| **Path** | `dav` |
-| **Protocol** | `http` or `https` (strongly recommend using **https** for security) |
-| **Port** | The port **must be identical** to the one used for accessing the OpenList web interface |
-| **Username** | The **username** you use to log into the OpenList web interface |
-| **Password** | The **password** you use to log into the OpenList web interface |
-
-:::
-::: zh-CN
+## 基础连接配置
使用以下参数连接你的 WebDAV 客户端:
@@ -83,53 +37,20 @@ Use the following parameters to connect your WebDAV client:
| **用户名** | 你在 OpenList 网页端登录使用的**用户名** |
| **密码** | 你在 OpenList 网页端登录使用的**密码** |
-:::
-
-## Storage Support { lang="en" }
-
-## 存储支持 { lang="zh-CN" }
+## 存储支持
-::: en
-::: warning
-Renaming during copy is not currently supported.
-:::
-::: zh-CN
::: warning
暂不支持复制时重命名。
:::
-## Client Software { lang="en" }
-
-## 客户端软件 { lang="zh-CN" }
+## 客户端软件
-::: en
-The following is a list of software that can be used to mount or access WebDAV services, categorized by platform:
-:::
-::: zh-CN
以下是一些可用于挂载或访问 WebDAV 服务的软件,按平台分类:
-:::
### 🖥️ Windows
-::: en
-
-- **File Managers / Mounting Tools:**
- - [RaiDrive](https://www.raidrive.com/) (Recommended for mounting)
- - [Mountain Duck](https://mountainduck.io/) (Mount as a disk)
- - [rclone](https://rclone.org/) (Command line/mounting)
- - [OneCommander](https://www.onecommander.com/) (File manager)
-
-- **Media Players (Direct Playback):**
- - [PotPlayer](https://potplayer.daum.net/)
- - [Kodi](https://kodi.tv/download)
- - [AIMP](https://www.aimp.ru/) (Audio player)
-
-:::
-
-::: zh-CN
-
- **文件管理器 / 挂载工具:**
- [RaiDrive](https://www.raidrive.com/) (推荐挂载)
- [Mountain Duck](https://mountainduck.io/) (挂载为磁盘)
@@ -140,28 +61,8 @@ The following is a list of software that can be used to mount or access WebDAV s
- [Kodi](https://kodi.tv/download)
- [AIMP](https://www.aimp.ru/) (音频播放器)
-:::
-
### 📱 Android
-::: en
-
-- **File Managers:**
- - [Solid Explorer](https://play.google.com/store/apps/details?id=pl.solidexplorer2)
- - [MiXplorer](https://mixplorer.com/) (Manual APK installation required, open source)
- - [X-plore File Manager](https://play.google.com/store/apps/details?id=com.lonelycatgames.Xplore)
- - ES File Explorer
-
-- **Media Players (Direct Playback):**
- - [nPlayer](https://play.google.com/store/apps/details?id=com.newin.nplayer.pro)
- - [Kodi](https://kodi.tv/download)
- - [Reex](https://play.google.com/store/apps/details?id=com.reex.reexplorer)
- - [VLC for Android](https://www.videolan.org/vlc/download-android.html) (Open source)
-
-:::
-
-::: zh-CN
-
- **文件管理器:**
- [Solid Explorer](https://play.google.com/store/apps/details?id=pl.solidexplorer2)
- [MiXplorer](https://mixplorer.com/) (需手动安装 APK, 开源)
@@ -173,23 +74,8 @@ The following is a list of software that can be used to mount or access WebDAV s
- [Reex](https://play.google.com/store/apps/details?id=com.reex.reexplorer)
- [VLC for Android](https://www.videolan.org/vlc/download-android.html) (开源)
-:::
-
### 🍎 iOS / iPadOS
-::: en
-
-- **Media Players / File Managers (Direct Playback / Management):**
- - [VidHub](https://zh.okaapps.com/product/1659622164)
- - [nPlayer](https://apps.apple.com/us/app/nplayer/id1116905928)
- - [Infuse](https://firecore.com/infuse)
- - [Fileball](https://apps.apple.com/us/app/fileball-file-manager-player/id1615474435)
- - [zFuse Player](https://apps.apple.com/us/app/zfuse-player/id1596223161)
-
-:::
-
-::: zh-CN
-
- **媒体播放器 / 文件管理器 (可直接播放/管理):**
- [VidHub](https://zh.okaapps.com/product/1659622164)
- [nPlayer](https://apps.apple.com/us/app/nplayer/id1116905928)
@@ -197,45 +83,15 @@ The following is a list of software that can be used to mount or access WebDAV s
- [Fileball](https://apps.apple.com/us/app/fileball-file-manager-player/id1615474435)
- [zFuse Player](https://apps.apple.com/us/app/zfuse-player/id1596223161)
-:::
-
### 📺 TV (Android TV / Google TV)
-::: en
-
-- **Media Players (Direct Playback):**
- - [VidHub](https://zh.okaapps.com/product/1659622164)
- - [nPlayer](https://play.google.com/store/apps/details?id=com.newin.nplayer.pro)
- - [Kodi](https://kodi.tv/download)
-
-:::
-
-::: zh-CN
-
- **媒体播放器 (可直接播放):**
- [VidHub](https://zh.okaapps.com/product/1659622164)
- [nPlayer](https://play.google.com/store/apps/details?id=com.newin.nplayer.pro)
- [Kodi](https://kodi.tv/download)
-:::
-
### 🍏 macOS
-::: en
-
-- **File Managers / Mounting Tools:**
- - [Mountain Duck](https://mountainduck.io/) (Mount as a disk)
- - [rclone](https://rclone.org/) (Command line/mounting)
-
-- **Media Players (Direct Playback):**
- - [VidHub](https://zh.okaapps.com/product/1659622164)
- - [Infuse](https://firecore.com/infuse)
- - [IINA](https://iina.io/) (Open source)
-
-:::
-
-::: zh-CN
-
- **文件管理器 / 挂载工具:**
- [Mountain Duck](https://mountainduck.io/) (挂载为磁盘)
- [rclone](https://rclone.org/) (命令行/挂载)
@@ -244,56 +100,21 @@ The following is a list of software that can be used to mount or access WebDAV s
- [Infuse](https://firecore.com/infuse)
- [IINA](https://iina.io/) (开源)
-:::
-
### 🐧 Linux
-::: en
-
-- **Mounting Tools / Command Line:**
- - [rclone](https://rclone.org/) (Recommended, feature-rich)
- - `davfs2` (System-level mounting, requires configuration)
-
-:::
-
-::: zh-CN
-
- **挂载工具 / 命令行:**
- [rclone](https://rclone.org/) (推荐, 功能强大)
- `davfs2` (系统级挂载, 需配置)
-:::
-
-### 📝 Note-taking Software { lang="en" }
-
-### 📝 笔记软件 { lang="zh-CN" }
-
-::: en
-
-- [Joplin](https://joplinapp.org/) (Supports WebDAV sync for notes, open source)
-
-> **Feel free to contribute!** If you find other excellent and compatible WebDAV clients, feel free to recommend them.
-
-:::
-
-::: zh-CN
+### 📝 笔记软件
- [Joplin](https://joplinapp.org/) (支持 WebDAV 同步笔记, 开源)
> **欢迎补充!** 如果你发现其他优秀且兼容的 WebDAV 客户端,欢迎推荐。
-:::
-
-## Client Configuration Examples { lang="en" }
-
-## 客户端配置示例 { lang="zh-CN" }
+## 客户端配置示例
-::: en
-The interfaces of different software vary, but the key is to correctly fill in the information from the "Basic Connection Configuration" above.
-:::
-::: zh-CN
不同软件界面各异,核心是正确填写上面“基础连接配置”中的信息。
-:::
### nPlayer (iOS/Android)
@@ -303,9 +124,7 @@ The interfaces of different software vary, but the key is to correctly fill in t

-### ES File Explorer (iOS & Android) { lang="en" }
-
-### ES 文件浏览器 (iOS & Android) { lang="zh-CN" }
+### ES 文件浏览器 (iOS & Android)
@@ -324,8 +143,6 @@ The interfaces of different software vary, but the key is to correctly fill in t

-### Synology NAS (Add via File Station) { lang="en"}
-
-### 群晖 NAS (通过 File Station 添加) { lang="zh-CN" }
+### 群晖 NAS (通过 File Station 添加)

diff --git a/pages/guide/drivers/115.md b/pages/guide/drivers/115.md
index a62ab9c67..eaf61a63f 100644
--- a/pages/guide/drivers/115.md
+++ b/pages/guide/drivers/115.md
@@ -1,35 +1,22 @@
---
-title:
- en: 115 Cloud / Share
- zh-CN: 115 网盘 / 分享
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 697
-# A page can have multiple categories
categories:
- guide
- drivers
---
+# 115 网盘 / 分享
+
-::: zh-CN
::: tip
[**115 官方 Open API**](115_open.md)
:::
-::: en
-::: tip
-[**115 Official Open API**](115_open.md)
-:::
-## 115 Cloud { lang="en" }
+## 115 个人网盘
-## 115 个人网盘 { lang="zh-CN" }
+### 视频教程(优先选择文字教程)
-### 视频教程(优先选择文字教程) { lang="zh-CN" }
-
-::: zh-CN
视频教程有可能因为时间关系导致部分视频内功能不可用或产生变化
所以推荐优先选择文字教程,当然如果你看不懂文字教程或者嫌麻烦也可以观看视频教程
@@ -38,48 +25,16 @@ categories:
-:::
-
-### Root folder ID { lang="en" }
-
-### 根文件夹 ID { lang="zh-CN" }
+### 根文件夹 ID
-::: en
-Open the official website of 115 Cloud and click the string behind the url when you click into the folder you want to set,
-such as ,
-which is `249163533602609229`
-:::
-
-::: zh-CN
打开 115 网盘官网,点击进入要设置的文件夹时点击 URL 中 `cid`后面的数字
如
这个文件夹的 `根文件夹ID` 即为 `249163533602609229`
-:::
-
-### Cookie获取方式 { lang="zh-CN" }
-
-### Cookie acquisition method { lang="en" }
-
-::: en
-The following message is displayed when mounting a 115 cloud. This is because 115 has removed the three client applications of `Windows, Mac, and Linux`.
-
-```json
-{
- "state": 0,
- "error": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
- "errno": 0,
- "message": "登录失败,系统已下架!如果你有电脑端的使用需求,我们诚挚邀请你下载体验115产品专属客户端“115浏览器”或在线使用“115网页端(115.com)”,畅享智能高效云生活。",
- "code": 0
-}
-```
-
-The cookies you have obtained from these three devices cannot be used. Please obtain the cookies from other devices again to mount them.
-:::
+### Cookie获取方式
-::: zh-CN
挂载115云盘提示如下信息,是因为 115已经下架了 `Windows、Mac、Linux` 这三个客户端的应用
```json
@@ -94,64 +49,31 @@ The cookies you have obtained from these three devices cannot be used. Please ob
你获取的是这三个设备的Cookie自然就无法使用,请重新获取其它设备的Cookie进行挂载
-:::
-
-#### 1. QRCode scanning method login { lang="en" }
+#### 1. QRCode 扫码方式登录
-#### 1. QRCode 扫码方式登录 { lang="zh-CN" }
-
-::: en
-::: tip
-Still under active development, please stay tuned!
-:::
-
-::: zh-CN
::: tip
开发中, 教程暂未更新, 敬请期待!
:::
-#### 2. 手动抓取 Cookie 方式登录 { lang="zh-CN" }
-
-#### 2. Log in by manually grabbing Cookies { lang="en" }
+#### 2. 手动抓取 Cookie 方式登录
-::: en
-The `cookie` can be obtained from the browser with your 115 account logined, or packet capture.
-:::
-::: en
-::: tip
-Please note that cookies should not end with `;`.
-:::
-
-::: zh-CN
Cookie 可以在浏览器登录账号时从浏览器获取,如 Chrome 浏览器可以使用 [115ToAlist插件](https://github.com/yenkn/115-to-alist) 自动同步 Cookie:

也可通过抓包 115 应用获取,有效期比较长。
-:::
-::: zh-CN
::: tip
注意 Cookie 最后不要有`;`。
:::
-#### 3. 使用 Python 脚本获取 Cookie { lang="zh-CN" }
-
-#### 3. Get Cookies Using Python Script { lang="en" }
+#### 3. 使用 Python 脚本获取 Cookie
-::: en
-Expand the detailed description to view the tutorial and script source code
-
-Source code from:[**https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61**](https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61)
-:::
-
-::: zh-CN
展开详细说明进行查看教程和脚本源码
源码来自:[**https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61**](https://gist.github.com/ChenyangGao/d26a592a0aeb13465511c885d5c7ad61)
-:::
::: details View source
@@ -318,32 +240,6 @@ if __name__ == "__main__":
:::
-::: en
-
-1. You need to install [**Python 3.11.x**](https://www.python.org/downloads/) or above
-2. If the QR code cannot be displayed properly in the `CMD` and `powershell` terminals, you can use the `-o` parameter to generate an image to scan the code, or you need to install an additional terminal
- 1. Use the `-o` parameter to generate the image method and scan the QR code to confirm
- - ````python
- python main.py wechatmini -o
- ```
- The devices that can be obtained are as follows. If you do not fill in the device, the default device on the `Web` side will be used
- `Web`,`android`,`ios`,~~`linux`,`mac`,`windows`~~,`tv`,`alipaymini`,`wechatmini`,`qandroid`
- ````
- - `alipaymini` and `wechatmini` They are Alipay Mini Program and WeChat Mini Program.
- - **Windows、Mac、Linux should not be able to use it anymore. The official client was recently removed from the shelves.**
- - It is recommended to use some devices that you do not commonly use, otherwise logging in will crowd out the previous ones.
- ***
- 2. Additional installation terminal
- - Windows Store:**https://apps.microsoft.com/detail/9n0dx20hk701?rtc=1&hl=zh-cn&gl=CN**
- - GitHub Download:**https://github.com/microsoft/terminal/releases**
- 3. Other ways, solve it yourself
-
----
-
-Execute the command and obtain the QR code. Scan the QR code on the APP to obtain `Cookie`
-
-::: zh-CN
-
1. 需要安装 [**Python 3.11.x**](https://www.python.org/downloads/) 以上版本
2. 如果二维码在 `CMD` 和 `powershell` 两个终端无法显示正常,可以使用`-o`参数生成图片的方式来扫码,或者需要额外安装一个终端
1. 使用 `-o` 参数,生成图片方式然后扫码确认
@@ -365,11 +261,8 @@ Execute the command and obtain the QR code. Scan the QR code on the APP to obtai
---
执行命令,获取二维码 APP扫码获取 `Cookie`
-:::
-
-##### 3.1. Direct Execution { lang="en" }
-##### 3.1.直接执行 { lang="zh-CN" }
+##### 3.1.直接执行
```shell
PS C:\Users\233\Desktop\115> python --version
@@ -391,16 +284,9 @@ PS C:\Users\233\Desktop\115> python main.py wechatmini
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
```
-::: en
-Execute the command directly. The QR code will appear in the terminal for display.
-:::
-::: zh-CN
直接执行 二维码会出现在终端中进行显示
-:::
-
-##### 3.2. Using the -o parameter { lang="en" }
-##### 3.2. 使用-o参数 { lang="zh-CN" }
+##### 3.2. 使用-o参数
```bash
PS C:\Users\233\Desktop\115> python --version
@@ -408,29 +294,9 @@ Python 3.12.2
PS C:\Users\233\Desktop\115> python main.py wechatmini -o
```
-::: en
-After using the `-o` parameter, a QR code image will pop up automatically
-:::
-
-::: zh-CN
使用 `-o` 参数后会自动弹出一张二维码图片
-:::
-
-### 秒传 { lang="zh-CN" }
-
-### Rapid upload { lang="en" }
-
-::: en
-- **v.3.27.0** version Enhanced Rapid upload: You can directly upload files with `Alibaba Cloud Disk Open` by copying
- - The premise is to upload the file from 115 Rapid upload to Alibaba Cloud Disk Open, the file already exists in Alibaba Cloud Disk Open, otherwise it is a normal copy task.
- - If you want to transfer 115 cloud disk files to Alibaba Cloud Disk in seconds, you need to turn on the Rapid upload option of Alibaba Cloud Disk, otherwise it will be uploaded in normal mode.
- If you want to upload files using Miaochuan, it is recommended to build an OpenList locally on your home computer and add a `local storage` and `115 cloud disk` to copy Miaochuan to save resources.
-
-
-:::
-
-::: zh-CN
+### 秒传
- **v.3.27.0** 版本 增强秒传:可以直接通过复制方式来和`阿里云盘Open`进行相互秒传文件
- 前提是要从115秒传到阿里云盘Open的文件,阿里云盘Open已经存在,否则就是正常复制任务。
@@ -438,29 +304,8 @@ After using the `-o` parameter, a QR code image will pop up automatically
如果要使用秒传来上传文件建议在自己家用电脑本地搭建一个OpenList添加一个`本地存储`和`115云盘`进行复制秒传这样节省资源。
-:::
+### 离线下载
-### 离线下载 { lang="zh-CN" }
-
-### Offline Download { lang="en" }
-
-::: en
-**v3.37.0** and above versions support calling `115 Cloud` offline download function in OpenList
-Select in the lower right corner and select `115 Cloud` for offline download options
-
-- Support: `magnet`, `http`, `ed2k` links
- Only 115 Cloud is supported for offline download. If it is not 115 Cloud, the following error message will be displayed, Although the offline download prompt was successfully added, an error will be prompted in the background.
-- unsupported storage driver for offline download, only 115 Cloud is supported
- 
-- Some tips for using 115 offline downloads:
- 1. Out of sync problems may occur (manual refresh in the lower right corner )
- 2. Currently, when the download is successful, completed tasks in the offline list are deleted.
- 3. 115 Task URLs that are already in the offline list cannot be added again.
-
-
-:::
-
-::: zh-CN
**v3.37.0** 及以上版本支持在OpenList调用115离线下载功能
右下角选择 离线下载选项选择`115 Cloud`
@@ -474,35 +319,7 @@ Select
-:::
-
-### 默认使用的下载方式 { lang="zh-CN" }
-
-### The default download method used { lang="en" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+### 默认使用的下载方式
```mermaid
---
@@ -523,86 +340,32 @@ flowchart TB
click c1 "../drivers/common.html#webdav-策略"
```
-:::
+## 115网盘分享
-## 115 Share { lang="en" }
-
-## 115网盘分享 { lang="zh-CN" }
-
-::: zh-CN

`分享链接ID`1 和 `分享链接提取码`2 分别如何获取一目了然
-:::
-::: en
-
-
-`Sharing link ID`1 and `Sharing link extraction code`2 How to obtain them respectively is clear at a glance.
-:::
-
-### Root folder ID { lang="en" }
-
-### 根文件夹ID { lang="zh-CN" }
-
-::: en
-The default is empty and the entire directory file is mounted.
-
-The folder IDs are the root folder ID and the subfolder ID respectively. The following demonstrates how to obtain the `shared root folder directory ID`1 and `other subfolder directory ID`2 respectively.
-:::
-
-#### 1. shared root folder directory ID { lang="en" }
-
-#### 1. 分享根文件夹目录ID {lang="zh-CN"}
+### 根文件夹ID
-::: en
-Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
+#### 1. 分享根文件夹目录ID
-Let's click on the root folder to enter. There will be a new request on the right, and then select `Load` to see the ID (cid) of our folder.
-
-
-:::
-::: zh-CN
打开开发者模式(F12)先将请求全部清空,我们进入文件夹,先将全部请求清空,
我们再点击根文件夹进入,右侧会有一个新的请求,然后选择`载荷`就能看到我们的这个文件夹的ID (cid)

-:::
-
-#### 2. other subfolder directory ID { lang="en" }
-#### 2. 其它子文件夹目录ID { lang="zh-CN" }
+#### 2. 其它子文件夹目录ID
-::: zh-CN
打开开发者模式(F12)先将请求全部清空,我们进入文件夹,先将全部请求清空,
右侧会有一个新的请求,然后选择`预览` 然后进行展开查看,就可以看到其它子文件夹的ID (cid)

-:::
-::: en
-Open developer mode (F12) and clear all requests first. Before we enter the folder, clear all requests first.
-
-There will be a new request on the right, then select `Preview` and expand it to see the IDs (cid) of other subfolders.
-
-
-:::
-### 错误提示 { lang="zh-CN" }
+### 错误提示
-### Error Tips { lang="en" }
-
-::: en
-For example, the 115 sharing link shown in the picture below has expired, but the sharing link can still be opened.
-
-
-
-But when adding and saving, the following error code will appear:
-
-`Failed init storage but storage is already created: failed init storage: failed to get share snap: json: cannot unmarshal number into Go struct field .data.shareinfo.share_state of type string `
-:::
-::: zh-CN
例如下图所示的115分享链接分享过期,但是分享链接还能打开

@@ -610,36 +373,8 @@ But when adding and saving, the following error code will appear:
但是在添加保存时候会出现如下错误码:
`Failed init storage but storage is already created: failed init storage: failed to get share snap: json: cannot unmarshal number into Go struct field .data.shareinfo.share_state of type string `
-:::
-
-### 默认使用的下载方式 { lang="zh-CN" }
-### The default download method used { lang="en" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-
-::: zh-CN
+### 默认使用的下载方式
```mermaid
---
@@ -659,5 +394,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/115_open.md b/pages/guide/drivers/115_open.md
index b92320c94..bb8a531e7 100644
--- a/pages/guide/drivers/115_open.md
+++ b/pages/guide/drivers/115_open.md
@@ -1,122 +1,37 @@
---
-title:
- en: 115 Open
- zh-CN: 115 开放平台
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 698
-# A page can have multiple categories
categories:
- guide
- drivers
---
-::: en
-::: tip
-Developed with the official [**115 Open Platform API**](https://open.115.com)
-:::
-::: zh-CN
+# 115 开放平台
+
::: tip
使用官方 [**115开放平台 API**](https://open.115.com) 开发
:::
-## 1. Necessary Conditions { lang="en" }
-
-## 1. 必要条件 { lang="zh-CN" }
+## 1. 必要条件
-::: en
-An **115** account is required.
-:::
-::: en
-::: warning Note
-The speed and stability are related to the local network environment, the network environment of the 115 server, and the performance of the machine running OpenList.
-:::
-
-::: zh-CN
必须有 **115** 的帐号
-:::
-::: zh-CN
+
::: warning 注意事项
速度与稳定性与本地网络环境,115 服务器的网络环境以及 OpenList 的运行机器的性能有关
:::
-## 2. Preparation for Access { lang="en" }
-
-## 2. 准备接入 { lang="zh-CN" }
+## 2. 准备接入
-### 2.1. Register an Application on the Open Platform (optional; no need to create if using the built-in key pair of OpenList/public welfare server/self-built server) { lang="en" }
+### 2.1. 开放平台注册应用(可选,如果使用OpenList/公益服务器/自建服务器内置的密钥对,则不用创建)
-### 2.1. 开放平台注册应用(可选,如果使用OpenList/公益服务器/自建服务器内置的密钥对,则不用创建) { lang="zh-CN" }
-
-::: en
-::: tip
-Please register the application according to the requirements of the 115 Open Platform.
-:::
-::: en
-Open Platform address: [115 Open Platform: https://open.115.com](https://open.115.com)
-:::
-::: zh-CN
::: tip
请根据115 开放平台的要求注册应用
:::
-::: zh-CN
-开放平台地址: [115 开放平台:https://open.115.com ](https://open.115.com)
-:::
-
-### 2.2. Obtain Tokens { lang="en" }
-
-### 2.2. 获取令牌 { lang="zh-CN" }
-
-::: en
-
-1. Visit [api.oplist.org](https://api.oplist.org) **⚠️ If using a public welfare server/self-built server, visit the address of the public welfare server/self-built server**.
-
-2. Select **115 Network Disk Verification** from the drop-down box.
-
- 
-
- 
-
-3. If you are using the built-in key pair of `OpenList (or public welfare server/self-built server)` (i.e., you do not have application information from the 115 Open Platform), please configure according to `3.1`, `3.2`, and `3.3`:
-
- 3.1. Check `Use parameters provided by OpenList`.
-
- 3.2. Leave both `Client ID (ClientID/AppID)` and `Application Secret (AppKey/Secret)` blank.
-
- 3.3. Click the `Get Token` button.
-
- 
- 
-
-4. If you are using your own created OAuth client ID and secret, please configure according to `4.1`, `4.2`, and `4.3`:
-
- 4.1. Do not check `Use parameters provided by OpenList`.
-
- 4.2. Enter your `AppId` in `Client ID` and your `AppSecret` in `Application Secret`.
-
- 4.3. Click the `Get Token` button.
-
- 
-
- 
-
-5. In the pop-up window, log in to your 115 account and authorize OpenList to access your 115 network disk.
-
- 
-
-6. After successful authorization, the page will display your `Access Token` and `Refresh Token`. Please copy and save these two tokens.
-
- 
-
- 
-
-:::
+开放平台地址: [115 开放平台:https://open.115.com ](https://open.115.com)
-::: zh-CN
+### 2.2. 获取令牌
1. 访问[api.oplist.org](https://api.oplist.org) **⚠️如果使用公益服务器/自建服务器,请访问公益服务器/自建服务器的地址**
@@ -160,30 +75,12 @@ Open Platform address: [115 Open Platform: https://open.115.com](https://open.11

-:::
-
-## 3. Adding 115 Network Disk to OpenList { lang="en" }
-
-## 3. 在OpenList中添加115网盘 { lang="zh-CN" }
+## 3. 在OpenList中添加115网盘
-### 3.1. Configuration Instructions { lang="en" }
+### 3.1. 配置说明
-### 3.1. 配置说明 { lang="zh-CN" }
+#### 3.1.1. 根文件夹 ID
-#### 3.1.1. Root Folder ID { lang="en" }
-
-#### 3.1.1. 根文件夹 ID { lang="zh-CN" }
-
-::: en
-The default root directory ID is: `0`
-
-Open the 115 network disk official website, and when clicking to enter the folder to be set, click the number after `cid` in the URL.
-
-For example,
-
-The `root folder ID` of this folder is `249163533602609229`.
-:::
-::: zh-CN
默认根目录ID为:`0`
打开 115 网盘官网,点击进入要设置的文件夹时点击 URL 中 `cid`后面的数字
@@ -191,35 +88,8 @@ The `root folder ID` of this folder is `249163533602609229`.
如
这个文件夹的 `根文件夹ID` 即为 `249163533602609229`
-:::
-### 3.2. Start Adding { lang="en" }
-
-### 3.2. 开始添加 { lang="zh-CN" }
-
-::: en
-
-1. Open the management interface of OpenList and click `Storage` in the left menu.
-
-2. On the storage list page, click the `Add Storage` button in the upper right corner.
-
-3. Select the driver as `115 Open Platform`.
-
- 
-
- 
-
-4. Enter the mounting path, such as: `115`.
-
-5. Enter the root folder ID obtained above in `Root Folder ID` (please refer to [3.1.1. Root Folder ID](#_3-1-1-root-folder-id)).
-
-6. Enter the obtained `Refresh Token` and `Access Token` in the refresh token (if not obtained, please refer to [2. Preparation for Access](#_2-preparation-for-access)).
- - 115's token refresh mechanism does not require AppKey and has IP-based rate limiting, so it is implemented using [local logic](https://github.com/OpenListTeam/115-sdk-go).
-
-7. Click the `Add` button to complete adding the 115 network disk.
-
-:::
-::: zh-CN
+### 3.2. 开始添加
1. 打开 OpenList 的管理界面,点击左侧菜单中的`存储`。
@@ -240,24 +110,7 @@ The `root folder ID` of this folder is `249163533602609229`.
7. 点击`添加`按钮,完成115网盘的添加。
-:::
-
-### 3.3. Method for Refreshing Access Token { lang="en" }
-
-### 3.3. 当前AccessToken刷新的方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
-sequenceDiagram
- participant OpenList
- participant 115
- OpenList->>115: Post refresh_token
- 115->>OpenList: Get new access_token and refresh_token
-```
-
-:::
-::: zh-CN
+### 3.3. 当前AccessToken刷新的方式
```mermaid
sequenceDiagram
@@ -267,26 +120,8 @@ sequenceDiagram
115服务器->>OpenList: 返回新的访问令牌+刷新令牌
```
-## 4. Notes { lang="en" }
-
-## 4. 注意事项 { lang="zh-CN" }
-
-::: en
-::: warning Handling Method for Token Leakage
-If the Token is accidentally leaked, you can go to the 115 device login management to解除应用授权 (revoke application authorization).
+## 4. 注意事项
-- 115 APP: [iOS, Android] versions need to be ≥ 35.11.0
-- 115 Web端: [https://115.com/?mode=device_manage](https://115.com/?mode=device_manage)
-
- When it expires, the following content will be prompted:
-
- ```json
- failed get objs: failed to list objs: code: 40140116, message: no auth
- ```
-
-An account can obtain two `Refresh tokens` in the same application. After the third acquisition, the first obtained `Refresh token` will expire. Using the first `Refresh token` will prompt the above error.
-:::
-::: zh-CN
::: warning Token 泄漏后处理方法
如果不小心泄漏了 Token,可以前往115设备登录管理解除应用授权
@@ -302,61 +137,19 @@ An account can obtain two `Refresh tokens` in the same application. After the th
一个帐号可以在同一个应用获取两次`Refresh token`,第三次获取后第一次获取到的`Refresh token`就会失效,使用第一个`Refresh token`会提示上面的错误
:::
-## 5. Using Other APP IDs to Obtain Refresh Tokens (Not Yet Implemented) { lang="en" }
-
-## 5. 使用其他 APP ID 获取刷新令牌(尚未实现) { lang="zh-CN" }
-
-::: en
-::: tip
-Under development, the tutorial has not been updated yet. Stay tuned!
-:::
+## 5. 使用其他 APP ID 获取刷新令牌(尚未实现)
-::: zh-CN
::: tip
开发中, 教程暂未更新, 敬请期待!
:::
-## 6. Mobile QR Code Authorization PKCE Mode (Not Yet Implemented) { lang="en" }
+## 6. 手机扫码授权PKCE模式(尚未实现)
-## 6. 手机扫码授权PKCE模式(尚未实现) { lang="zh-CN" }
-
-::: en
-::: tip
-Under development, the tutorial has not been updated yet. Stay tuned!
-:::
-
-::: zh-CN
::: tip
开发中, 教程暂未更新, 敬请期待!
:::
-## 7. Default Download Method Used { lang="en" }
-
-## 7. 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+## 7. 默认使用的下载方式
```mermaid
---
@@ -376,5 +169,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/123.md b/pages/guide/drivers/123.md
index 8d1a897ab..fe3e8f247 100644
--- a/pages/guide/drivers/123.md
+++ b/pages/guide/drivers/123.md
@@ -1,27 +1,14 @@
---
-title:
- en: 123 Pan / Share / Link
- zh-CN: 123 网盘 / 分享 / 直链
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 695
-# A page can have multiple categories
categories:
- guide
- drivers
---
-
-
-::: en
-::: warning
-123 Cloud Disk has implemented anti-leech measures for this **reverse-engineered driver**. To avoid unnecessary disputes, it is recommended that users choose the more standard 123 Open Platform driver. If you continue to use this driver, you need to enable a **local proxy** to prevent anti-leech detection.
+# 123 网盘 / 分享 / 直链
-- [123 Open Platform](./123_open.md)
+
-:::
-::: zh-CN
::: warning
123云盘对于该**逆向驱动**已经采取防盗链措施,为了避免不必要的纠纷,建议用户选用更为规范的123开放平台驱动。如果继续使用该驱动,需要开启**本地代理**以防止反盗链检测
@@ -29,32 +16,10 @@ categories:
:::
-## Personal { lang="en" }
-
-## 个人 { lang="zh-CN" }
-
-::: en
-Free user 1G traffic download, unlimited upload, multi-IP sharing is prohibited
-:::
+## 个人
-::: zh-CN
免费用户 1G 流量下载,上传不限制,禁止多IP共享使用
-:::
-::: en
-::: warning
-
-```json
-failed get objs: failed to list objs:当前账号存在安全风险,请使用短信验证码或者微信进行登录。
-```
-
-solution:
-
-- This is because the 123 cloud disk officially prohibits the mounting on strange devices, If you are mounted locally, `or` Windows Server server mount `to open the 123 cloud disk web page to log in or modify a password once
-
-:::
-
-::: zh-CN
::: warning
挂载提示:
@@ -68,113 +33,39 @@ failed get objs: failed to list objs:当前账号存在安全风险,请使用
:::
-::: en
-https://www.123pan.com/
-
-Just fill in the account password.
-:::
-
-::: zh-CN
https://www.123pan.com/
只需填写账户密码即可。
-:::
-
-### 用户名 { lang="zh-CN" }
-
-### Username { lang="en" }
+### 用户名
-::: en
-The mobile phone number used to log in
-:::
-::: zh-CN
用于登录的手机号码
-:::
-
-### 密码 { lang="zh-CN" }
-### Password { lang="en" }
+### 密码
-::: en
-The password used to log in
-:::
-::: zh-CN
用于登录的密码
-:::
-### 根文件夹 ID { lang="zh-CN" }
+### 根文件夹 ID
-### Root folder file_id { lang="en" }
-
-::: en
-Enter the folder you want to mount, the last string of the official website URL, such as:
-:::
-::: zh-CN
输入要挂载的文件夹,官网 URL 的最后一串,如:
-:::

-### 使用建议 { lang="zh-CN" }
-
-### Recommendations { lang="en" }
-
-::: en
-
-- It seems that the 123 API has a limited number of loads each time, so if you load hundreds of files in a folder at one time, an error may be reported
-- It is recommended to A useful approach is not to put too many sub-items in the same folder.
-
-:::
-
-::: zh-CN
+### 使用建议
- 貌似 123 的 API 每次加载的数量有限,故如果你一个文件夹内一次性加载几百个文件,可能会报错
- 建议不用在每个文件夹内放置太多子文件/文件夹
-:::
-
-## 直链 { lang="zh-CN" }
-
-## Link { lang="en" }
+## 直链
-::: en
-only adapted to the authentication function, the link also needs to be filled in by yourself, like [UrlTree](/guide/drivers/url_tree), fill in the direct link copied in 123 direct link.
-:::
-::: zh-CN
仅适配了鉴权功能,链接也需要自己填写,像[地址树一样](/guide/drivers/url_tree.md),把在 123 直链复制的直链填写进去即可
-:::
-
-::: en
-::: danger Please read this reminder carefully
-Since 123 Cloud Disk Direct Link is a paid service with a storage quota, if you decide to add more storage, please ensure you set up passwords, metadata, and other protective measures to prevent malicious traffic.
-
-After configuring these settings, test them in incognito mode to confirm everything is working correctly. If you fail to implement adequate anti-theft measures and experience malicious traffic overload, you will be held responsible for the consequences.
-:::
-
-::: zh-CN
::: danger 请仔细阅读此提醒
由于123云盘直链是付费服务并有限制额度,如果您添加123直链存储,请及时设置密码、元信息等安全措施,以防止恶意刷流量。
设置完成后,请先在无痕模式下进行测试,确保防盗措施已正确设置。如未设置妥当,导致被恶意刷流量,后果自负。
:::
-::: en
-First open **`123 Cloud Disk Direct Link Management`**: **https://www.123pan.com/DirectLink** Set an authentication key in the lower right corner, and then turn on the authentication status switch
-
-
-
-- Open Settings 123 Cloud Disk Settings: **https://www.123pan.com/Setting** and find the account ID [`1` label in the picture below]
-- How to activate direct link? (You need to activate membership to use it)
- - Find the folder you want to open, right-click on `Enable Direct Link Space`, and after opening it, you will see a link icon in the folder [Tag `2` in the picture below]
-- How to get a direct link to a file? [Tag `3` in the picture below]
- - Enter the folder that has 'enabled direct link space', find the file you need to obtain, right-click 'Get direct link', and fill in the OpenList configuration after obtaining it.
- 
-
-:::
-
-::: zh-CN
首先打开 **`123云盘直链管理`**: **https://www.123pan.com/DirectLink** 右下角自己设置一个鉴权秘钥,然后打开鉴权状态开关

@@ -186,42 +77,7 @@ First open **`123 Cloud Disk Direct Link Management`**: **https://www.123pan.com
- 进入已经`启用直链空间`的文件夹,找到需要获取的文件右键`获取直链链接`,获取到后填写到OpenList配置內

-:::
-
-### 填写示例 { lang="zh-CN" }
-
-### Fill in example { lang="en" }
-
-::: en
-
-- **Origin urls**:Fill in the direct link to the files we copied one by one
- - It supports creating different folders like [UrlTree](/guide/drivers/url_tree), and supports filling in the file size and modification time (four options are provided for use, like the UrlTree filling, refer to the second example of the picture below)
- - File size unit: `B` bytes. For example, if you want to write a 1MB file, it is 1048567 bytes. You can search for the specific byte conversion in your browser (you can leave it blank).
- - File modification time: It is `Unix timestamp`. You can search in the browser for the specific conversion (you can leave it blank).
-
- Fill in the format:
-
- ```txt
- [FileSize:][Modified:]URL
- 127451136:1694101621:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_mips64el.deb
- [FileSize:]URL
- 134847488:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_loong64.deb
- [Modified:]URL
- 1694101621:https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_arm64.AppImage
- URL
- https://vip.123pan.cn/1812xxx499/123-link-Test/linuxqq_3.2.0-16736_x86_64.AppImage
- ```
-
-- **Private key**:
- - You can set up the direct link management page yourself and turn it on. Please turn it on.
-- **Uid**:
- - Account ID in the account settings page
-- **Valid duration**:
- - The file direct link validity period, in minutes, is filled in by default to 30 minutes
-
-:::
-
-::: zh-CN
+### 填写示例
- **来源链接**:填写我们一条一条复制的文件直链
- 支持像[地址数](/guide/drivers/url_tree)那样新建不同文件夹,支持填写文件大小和修改时间(提供四种方案可以使用,像地址树填写参考下方图片的图二示例)
@@ -248,62 +104,24 @@ First open **`123 Cloud Disk Direct Link Management`**: **https://www.123pan.com
- **有效期**:
- 文件直链有效期,单位为分钟,默认填充为30分钟
-:::
-


-## 分享 { lang="zh-CN" }
-
-## Share { lang="en" }
+## 分享
-::: en
-Fill in the driver's **`share key`** and optional **`share password`** (if there is a password, you need to fill in), the root folder ID defaults to `0` to display all files
-:::
-::: zh-CN
填写驱动的 **`分享key`** 和选填 **`分享密码`** (如果有密码需要填写),根文件夹ID默认为`0`显示全部文件
-:::
-
-### 填写示例 { lang="zh-CN" }
-### Fill in the example { lang="en" }
+### 填写示例
-::: en

-:::
-::: zh-CN
-
-:::
-
-### Share Password { lang="en" }
-### 分享密码 { lang="zh-CN" }
+### 分享密码
-::: en
-Fill in if you have it, don't if you don't
-:::
-::: zh-CN
有就填写,没有就不用
-:::
-
-### Root folder file_id { lang="en" }
-### 根文件夹 ID { lang="zh-CN" }
+### 根文件夹 ID
-::: en
-The ID of the root directory of the shared link is `0`, displaying all files
-
-If you only want to display a certain folder, open the developer mode (F12) to clear all requests (maybe 123 prohibits debug debugging, you need to close this by yourself to continue)
-
-Find the request on the right side of the picture in the upper-level directory request of the directory you want to display, then click `Response`, find the format button `{}` below and format it, and you can see the relevant directory ID.
-
-If you are not sure whether the directory ID is correct or not, there is a directory name under the directory ID
-
-
-
-:::
-::: zh-CN
分享链接根目录ID是`0`,展示全部文件
如果只想展示某个文件夹,打开开发者模式(F12)清空全部请求(可能123禁止debug调试需要自己关闭这个才能继续)
@@ -314,36 +132,7 @@ If you are not sure whether the directory ID is correct or not, there is a direc

-:::
-
-## The default download method used { lang="en" }
-
-## 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-
-::: zh-CN
+## 默认使用的下载方式
```mermaid
---
@@ -363,5 +152,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/123_open.md b/pages/guide/drivers/123_open.md
index 68ed98c2e..d94ff33f9 100644
--- a/pages/guide/drivers/123_open.md
+++ b/pages/guide/drivers/123_open.md
@@ -1,33 +1,18 @@
---
-title:
- en: 123 Open
- zh-CN: 123 开放平台
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 696
-# A page can have multiple categories
categories:
- guide
- drivers
---
+# 123 开放平台
+
https://www.123pan.com/developer
-## 1. Developer Application { lang="en" }
-
-## 1. 申请开发者 { lang="zh-CN" }
-
-::: en
-::: warning
-This driver uses the [developer authorization mode](https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/hpengmyg32blkbg8), which grants direct management access to the cloud drive associated with the provided public/private key pair, , so you **must use your client id and client secret**.
-
-The acquired token counts as a login device
+## 1. 申请开发者
-:::
-::: zh-CN
::: warning
该驱动使用的是[开发者授权模式](https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced/hpengmyg32blkbg8),将会直接获得该密钥对应网盘的管理权限,所以**必须使用自己的密钥**。
@@ -35,21 +20,6 @@ The acquired token counts as a login device
:::
-::: en
-
-**Application Method**: Visit the [123 Open Platform Official Website](https://www.123pan.com/developer), read the Developer Agreement, fill in the required fields marked with `*`, and apply for the `client_id` and `client_secret`.Typically, after your application is approved the keys will be sent to your email **remember to check your spam folder, and please keep the keys sent by email safe**.
-
-1. Sign the Developer Agreement
-
-2. Fill out the application materials
-
-3. Wait for the review notification
-
-**Reference Tutorial**: [OpenListTeam/discussions#55](https://github.com/orgs/OpenListTeam/discussions/55)
-
-:::
-::: zh-CN
-
**申请方式**:访问[123开放平台官网](https://www.123pan.com/developer),阅读开发者协议,填写对应必填项`*`信息,申请`client_id`和`client_secret`,一般来说申请通过后会发送至邮箱,记得检查邮件的垃圾箱,**请保管好通过邮件发送回来的密钥**。
1. 签署开发者协议
@@ -60,31 +30,7 @@ The acquired token counts as a login device
**参考教程**:[OpenListTeam/discussions#55](https://github.com/orgs/OpenListTeam/discussions/55)
-:::
-
-### 2. Get UID { lang="en" }
-
-### 2. 获取 UID { lang="zh-CN" }
-
-::: en
-
-The method to obtain the "Cloud Drive UID" required during the application process is as follows:
-
-1. **Log in to the 123 Cloud Drive web platform**
-
- Visit the 123 Cloud Drive official website and log in with your account (phone number).
-
-2. **Go to the "Settings" page**
-
- After logging in, click on the profile picture or username at the top right, and select "Settings" (or directly visit: ).
-
-3. **Find the "Account ID"**
-
- In the "Account Settings" or "Security Settings" section, locate the "Account ID," which is your "Cloud Drive UID." Copy it and paste it into the application form.
-
-:::
-
-::: zh-CN
+### 2. 获取 UID
填写申请过程中需要填入的“云盘UID”一项获取方式如下:
@@ -100,61 +46,22 @@ The method to obtain the "Cloud Drive UID" required during the application proce
在「账号设置」或「安全设置」栏目中,找到“个人账号ID”,该ID即为您的“云盘UID”,复制并填入即可。
-:::
-
-## 4. 在 OpenList 中添加 { lang="zh-CN" }
-
-## 4. Add in OpenList { lang="en" }
+## 4. 在 OpenList 中添加
-### 刷新令牌 { lang="zh-CN" }
+### 刷新令牌
-### RefreshToken { lang="en" }
-
-::: zh-CN
**留空**
-:::
-::: en
-**keep it empty**
-:::
-### 客户端ID { lang="zh-CN" }
+### 客户端ID
-### Client ID { lang="en" }
-
-::: zh-CN
填入你的客户端ID
-:::
-::: en
-Enter your client ID
-:::
-
-### 客户端密钥 { lang="zh-CN" }
-### Client Secret { lang="en" }
+### 客户端密钥
-::: zh-CN
填入你的客户端密钥
-:::
-::: en
-Enter your client secret
-:::
-
-### Root Folder ID { lang="en" }
-### 根文件夹 ID { lang="zh-CN" }
+### 根文件夹 ID
-::: en
-The default root directory ID is: `0`
-
-Open the official website of 123 Cloud Drive, navigate to the folder you want to set, and then click the number following `homeFilePath` in the URL.
-
-For example,
-
-API queries can also be used
-
-The `root folder ID` of this folder is `123456`.
-:::
-::: zh-CN
默认根目录ID为:`0`
打开 123 网盘官网,点击进入要设置的文件夹时点击 URL 中 `homeFilePath`后面的数字
@@ -167,39 +74,16 @@ The `root folder ID` of this folder is `123456`.
亦可右键文件夹,选择 `复制文件夹ID`
-:::
-
-### Direct Link { lang="en" }
-
-### 使用直链 { lang="zh-CN" }
+### 使用直链
-::: en
-Disabled by default; returns standard download links. When enabled, returns CDN direct links, which require VIP access and will consume direct link traffic quota.
-
-Users must manually enable direct link space: Go to the 123 Cloud Drive official website, right-click a folder under the **root directory**, and select `Enable Direct Link Space (VIP)`.
-:::
-::: zh-CN
默认禁用,返回普通下载链接。启用后,返回 CDN 直链,需要开通 VIP,会消耗直链流量包。
需要用户手动启用直链空间,方法:进入 123 网盘官网,右键**根目录**下的文件夹,选择 `启用直链空间(VIP)`。
-:::

-### Direct Link Private Key { lang="en" }
-
-### 直链鉴权密钥 { lang="zh-CN" }
-
-::: en
-Prerequisite: Enable `Direct Link`.
-
-Leave empty to disable direct link authentication and return permanent direct links.
-
-To prevent your site resources from being maliciously downloaded or stolen, you can configure an "Authentication Key" in 123 Cloud Drive's **Direct Link** → **Basic Function Configuration** → **URL Authentication**, and then set **Authentication Status** to **Enabled**.
+### 直链鉴权密钥
-After entering the key, the obtained direct links will automatically include authentication parameters.
-:::
-::: zh-CN
前置条件:开启 `使用直链`。
默认为空,代表不启用直链鉴权,返回永久直链。
@@ -207,53 +91,16 @@ After entering the key, the obtained direct links will automatically include aut
为防止站点资源被恶意下载盗用,您可以在 123 云盘的 **直链** -> **基础功能配置** -> **URL鉴权** 中配置 **鉴权密钥**,然后将 **鉴权状态** 设为 **启用**。
填写密钥后,获取到的直链会自动加上鉴权参数。
-:::

-### Direct Link Valid Duration { lang="en" }
-
-### 直链鉴权有效期 { lang="zh-CN" }
+### 直链鉴权有效期
-::: en
-Prerequisite: Enable `Direct Link` and configure the `Direct Link Private Key`.
-
-Used to generate the expiration timestamp in the direct link authentication parameters.
-:::
-::: zh-CN
前置条件:开启 `使用直链`,配置 `直链鉴权密钥`。
用于生成直链鉴权参数中的过期时间戳。
-:::
-
-## The default download method used { lang="en" }
-
-## 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[local proxy]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[302]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+## 默认使用的下载方式
```mermaid
---
@@ -273,5 +120,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/139.md b/pages/guide/drivers/139.md
index 2e6970327..7acb94f51 100644
--- a/pages/guide/drivers/139.md
+++ b/pages/guide/drivers/139.md
@@ -1,73 +1,26 @@
---
-title:
- en: 139Yun
- zh-CN: 中国移动云盘
-# This is the icon of the page
-icon: iconfont icon-state
-# This control sidebar order
top: 692
-# A page can have multiple categories
categories:
- guide
- drivers
---
-
+# 中国移动云盘
-::: en
-Cloud disk address: ****
-:::
+
-::: zh-CN
云盘地址:****
-:::
-
-:::en
-::: warning
-The OpenList version must be greater than `v3.41.0` to use this tutorial.
-:::
-:::zh-CN
::: warning
OpenList 版本必须大于 `v4.2.4` 才能使用本教程。
:::
-:::en
-::: tip
-Most parameters can be obtained from browser DevTools. See [Search keywords](#search-keywords).
-:::
-
-:::zh-CN
::: tip
大部分参数可通过浏览器开发者工具获取。请参考[搜索关键词](#搜索关键词)。
:::
-## Quick start { lang="en" }
+## 快速开始
-## 快速开始 { lang="zh-CN" }
-
-::: en
-For long-term use, use the new personal cloud with password login fallback. This lets OpenList persist the generated `Authorization` and renew it automatically when possible.
-
-1. Log in to in your browser.
-2. Copy cookies from `mail.10086.cn` and paste them into `MailCookies` as a Cookie Header String, for example `key1=value1; key2=value2`. Do not paste JSON, a table, or one cookie per line.
-3. Fill your 139 email/mobile account in `Username`, and fill the corresponding password in `Password`.
-4. Add a `139Yun` storage in OpenList and fill:
- - `Type`: `personal_new`
- - `MailCookies`: the cookies copied in step 2
- - `Username`: your account
- - `Password`: your password
- - `Root folder ID`: leave empty or fill `/` for the root directory
-5. Leave `Authorization`, `Cloud ID`, and `UserDomainID` empty.
-6. Save the storage.
-
-If you only want to mount quickly, you can fill only `Authorization`: log in to , find a `hcy/file/list` request in DevTools -> Network, copy the request header `Authorization`, and paste only the content after `Basic `.
-
-If you want to mount a subfolder, enter that folder on the 139Yun website first, then use the current `parentFileId` or `currentCatalogID` as `Root folder ID`.
-
-:::
-
-::: zh-CN
长期使用推荐按“新的个人盘 + 账号密码回退登录”配置。这样 OpenList 可以持久化生成的 “授权”,并在可行时自动续期。
1. 在浏览器登录 。
@@ -86,30 +39,8 @@ If you want to mount a subfolder, enter that folder on the 139Yun website first,
如果要挂载子文件夹,请先在移动云盘网页端进入该文件夹,再把当前的 `parentFileId` 或 `currentCatalogID` 填到 “根文件夹 ID”。
-:::
-
-## Authentication { lang="en" }
-
-## 鉴权方式 { lang="zh-CN" }
+## 鉴权方式
-::: en
-The driver supports three authentication methods. Use only one method unless you need password login as a fallback.
-
-| Method | Fields to fill | Notes |
-| ----------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Password login fallback | `MailCookies`, `Username`, `Password` | Recommended for long-term use. `MailCookies` must be a Cookie Header String, such as `key1=value1; key2=value2`. The driver can generate and persist a new `Authorization`, and can fall back to password login when token refresh fails. |
-| Authorization | `Authorization` | Fastest setup. Fill in the value after `Basic `. Do not include `Basic` itself. You may need to update it manually after it expires or refresh fails. |
-| Mail cookies fast login | `MailCookies` | Use cookies from `mail.10086.cn`. `MailCookies` must be a Cookie Header String and contain valid key-value pairs; `Os_SSo_Sid` and `RMKEY` are used for fast login. |
-
-`Username`, `Password`, and `MailCookies` are not required when `Authorization` is valid, even if an old frontend marks them as required.
-
-When using password login fallback, `MailCookies`, `Username`, and `Password` must be filled together.
-
-`MailCookies` should look like the value of an HTTP `Cookie` request header: `key1=value1; key2=value2; key3=value3`.
-
-:::
-
-::: zh-CN
驱动支持三种鉴权方式。除非需要密码登录作为回退,否则选择其中一种即可。
| 方式 | 需要填写的字段 | 说明 |
@@ -124,26 +55,8 @@ When using password login fallback, `MailCookies`, `Username`, and `Password` mu
“邮箱 Cookie” 应该像 HTTP 请求头里的 `Cookie` 值:`key1=value1; key2=value2; key3=value3`。
-:::
-
-## Type { lang="en" }
-
-## 类型 { lang="zh-CN" }
+## 类型
-::: en
-OpenList currently supports five 139Yun storage types. `personal_new` is the default.
-
-| Type | Use for | Root folder ID when empty | Cloud ID | Notes |
-| -------------- | ------------------------- | ------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------- |
-| `personal_new` | New personal cloud | `/` | Not required | New API. Uses direct EOS multipart upload. |
-| `family` | My Family -> Family Files | Automatically tries to save `data.path` without the `root:/` prefix | Required | Uses Family Cloud APIs. If auto-detection fails, fill the folder ID manually. |
-| `group` | Shared group | Uses `Cloud ID` | Required | For groups created by others, manually fill the folder ID to avoid first-level folder loops. |
-| `personal` | Old personal cloud | `root` | Not required | Legacy personal cloud. Most accounts have been migrated to `personal_new`. |
-| `share` | Shared link mount | Share link ID from `LinkID` | Not required | Mount other users' shared content. Use `LinkID` to specify one or more share links. |
-
-:::
-
-::: zh-CN
OpenList 目前支持五种中国移动云盘类型,默认类型是 `personal_new`(新的个人盘)。
| 类型 | 适用场景 | 根文件夹 ID 为空时 | Cloud ID | 说明 |
@@ -154,35 +67,12 @@ OpenList 目前支持五种中国移动云盘类型,默认类型是 `personal_
| `personal`(个人云) | 个人云 | `root` | 不需要 | 个人云。多数账号已经迁移到 `personal_new`(新的个人盘)。 |
| `share`(分享挂载) | 分享挂载 | 使用 `LinkID` 中的分享链接 ID | 不需要 | 挂载他人分享的内容。通过 `LinkID` 指定一个或多个分享链接。 |
-:::
-
-:::en
-::: warning
-After changing `Type`, clear or update `Root folder ID`, then save the storage again.
-:::
-
-:::zh-CN
::: warning
更改 `Type` 后,请清空或重新填写 `Root folder ID`,再保存存储。
:::
-## Root folder ID { lang="en" }
-
-## 根文件夹 ID { lang="zh-CN" }
+## 根文件夹 ID
-::: en
-`Root folder ID` specifies the mounted directory.
-
-- `personal_new`: use `/` for the root. For a subfolder, use the folder ID from `parentFileId` or `currentCatalogID`.
-- `family`: leave empty to let OpenList try to read `data.path` automatically. When filling manually, remove the `root:/` or `root:` prefix.
-- `group`: leave empty only when mounting your own group root. For a subfolder or a group created by others, fill the folder ID manually.
-- `personal`: use `root` for the legacy root.
-- `share`: not used. The share link ID from `LinkID` replaces the root folder concept.
-
-Do not add extra `/` around subfolder IDs. For example, use `abc123`, not `/abc123`.
-:::
-
-::: zh-CN
“根文件夹 ID” 用于指定要挂载的目录。
- `personal_new`(新的个人盘):根目录填写 `/`。挂载子文件夹时,使用 `parentFileId` 或 `currentCatalogID` 中的文件夹 ID。
@@ -193,23 +83,8 @@ Do not add extra `/` around subfolder IDs. For example, use `abc123`, not `/abc1
手动填写子文件夹 ID 时不要额外添加 `/`。例如填写 `abc123`,不要填写 `/abc123`。
-:::
-
-## Cloud ID { lang="en" }
-
-## Cloud ID { lang="zh-CN" }
-
-::: en
-`Cloud ID` is required only for `family` and `group`.
-
-- `family`: family cloud ID.
-- `group`: group ID.
-- `personal_new` and `personal`: leave empty.
-- `share`: leave empty.
-
-:::
+## Cloud ID
-::: zh-CN
Cloud ID 只在 `family`(家庭云) 和 `group`(共享群) 类型下需要填写。
- `family`(家庭云):家庭云 ID。
@@ -217,86 +92,25 @@ Cloud ID 只在 `family`(家庭云) 和 `group`(共享群) 类型下需
- `personal_new`(新的个人盘) 和 `personal`(个人云):留空。
- `share`(分享挂载):留空。
-:::
-
-## User domain ID { lang="en" }
-
-## 用户域 ID { lang="zh-CN" }
-
-::: en
-`UserDomainID` is the `ud_id` value in cookies. It is optional for mounting and is mainly used to show disk usage in storage details. If it is empty, file listing and downloads can still work, but capacity statistics are unavailable.
+## 用户域 ID
-:::
-
-::: zh-CN
“用户域 ID” 是 Cookie 中的 `ud_id`。它不是挂载必填项,主要用于在存储详情中显示容量统计。留空时仍可列目录和下载,但无法显示容量信息。
-:::
-
-## Advanced options { lang="en" }
-
-## 高级选项 { lang="zh-CN" }
-
-::: en
-
-- `Custom upload part size`: upload part size in bytes. `0` means automatic. The driver uses `100 MB` by default and increases it to `512 MB` for files larger than `30 GB`.
-- `Report real size`: enabled by default. For old personal, family, and group uploads, it reports the real file size to the upstream API.
-- `Use large thumbnail`: disabled by default. Enable it to prefer large image thumbnails when the new personal cloud API returns them.
-- `Use old stream upload`: disabled by default. Enable it to use the legacy streaming upload method for family and group cloud types. The new method supports rapid upload (server-side duplicate check) but does not support streaming; the legacy method does not support rapid upload.
-
-:::
-
-::: zh-CN
+## 高级选项
- 自定义上传分片大小:上传分片大小,单位为字节。`0` 表示自动。驱动默认使用 `100 MB`,文件大于 `30 GB` 时会自动使用 `512 MB`。
- 报告真实大小:默认开启。个人云、家庭云、共享群上传时,会向上游接口上报真实文件大小。
- 使用大缩略图:默认关闭。开启后,新的个人盘接口返回大图缩略图时会优先使用大图。
- 使用旧版流式上传:默认关闭。开启后,家庭云和共享群使用旧版流式上传方式。新版上传支持秒传(服务端去重)但不支持流式;旧版上传不支持秒传。
-:::
-
-## Proxy Range { lang="en" }
-
-## 代理 Range { lang="zh-CN" }
-
-::: en
-`Proxy Range` is enabled by default in the driver, but it only takes effect after enabling `Web Proxy` or `WebDAV Native Proxy`.
-
-Enable proxy mode when a player or downloader cannot handle the upstream 302 link correctly, for example when video playback fails, seeking fails, or resumable downloads do not work.
+## 代理 Range
-:::
-
-::: zh-CN
驱动默认开启 `代理 Range`,但它需要配合 `Web 代理` 或 `WebDAV 本地代理` 才会生效。
当播放器或下载器不能正确处理上游 302 链接时,建议开启代理模式,例如视频无法播放、拖动进度失败或不支持断点续传。
-:::
-
-## Search keywords { lang="en" }
-
-## 搜索关键词 { lang="zh-CN" }
+## 搜索关键词
-::: en
-Use browser DevTools to find the fields below.
-
-| Need | Where to search | Field |
-| ------------------------- | --------------------------------------------------- | -------------------------------------------------------------- |
-| `Authorization` | Network request headers on `yun.139.com` | `Authorization: Basic ...`; copy only the value after `Basic ` |
-| New personal folder ID | `hcy/file/list` request, or browser storage | `parentFileId` or `currentCatalogID` |
-| Family Cloud ID | `queryContentList` request payload | `cloudID` |
-| Family folder ID | `queryContentList` response | `data.path`; remove `root:/` or `root:` when filling manually |
-| Group ID | `queryGroupContentList` request payload | `groupID` |
-| Group folder ID | `queryGroupContentList` request payload or response | `path` or folder ID |
-| Legacy personal folder ID | `getDisk` request or response | `catalogID` |
-| `UserDomainID` | Browser cookies | `ud_id` |
-| Share link ID | Share page URL on `yun.139.com` | The path segment after `/share/` in the sharing URL |
-
-In Firefox, cookies and local storage can be easier to find in DevTools -> Storage.
-
-:::
-
-::: zh-CN
使用浏览器开发者工具查找以下字段。
| 需要获取 | 查找位置 | 字段 |
@@ -313,23 +127,8 @@ In Firefox, cookies and local storage can be easier to find in DevTools -> Stora
Firefox 中可以在开发者工具 -> 存储中查看 Cookie 和本地存储,通常更容易找到 `Authorization`、`ud_id` 和 `currentCatalogID`。
-:::
-
-### Personal new { lang="en" }
-
-### 新的个人盘 { lang="zh-CN" }
-
-::: en
-Choose one of the following methods to find `Authorization` and folder ID.
-
-
-
-
-If you want the folder ID of a subfolder, enter that subfolder first and then inspect the new request or storage value. Otherwise, the old folder ID may still be displayed.
-
-:::
+### 新的个人盘
-::: zh-CN
以下方法可用于查找 “授权” 和文件夹 ID。

@@ -337,30 +136,13 @@ If you want the folder ID of a subfolder, enter that subfolder first and then in
如果要查看子文件夹 ID,请先进入该子文件夹,再查看新的请求或存储值,否则看到的可能仍是之前的文件夹 ID。
-:::
-
-### Personal cloud { lang="en" }
-
-### 个人云 { lang="zh-CN" }
+### 个人云


-### Family cloud { lang="en" }
-
-### 家庭云 { lang="zh-CN" }
+### 家庭云
-:::en
-
-
-
-::: details Teaching video
-Although the video is for V2, the method for obtaining folder ID and Cloud ID is still similar.
-
-****
-:::
-
-:::zh-CN


@@ -370,21 +152,7 @@ Although the video is for V2, the method for obtaining folder ID and Cloud ID is
****
:::
-### OpenList fill in examples { lang="en" }
-
-### OpenList 挂载填写示例 { lang="zh-CN" }
-
-::: en
-
-- `Authorization`: fill in only the content after `Basic `.
-- New personal folder ID: enter the target folder first, then use the current `currentCatalogID`.
-
-
-
-
-:::
-
-::: zh-CN
+### OpenList 挂载填写示例
- “授权”:只填写 `Basic ` 后面的内容。
- 新的个人盘文件夹 ID:先进入目标文件夹,再使用当前的 `currentCatalogID`。
@@ -392,83 +160,28 @@ Although the video is for V2, the method for obtaining folder ID and Cloud ID is



-:::
-
-## Share mount { lang="en" }
-## 分享挂载 { lang="zh-CN" }
-
-::: en
-The `share` type allows you to mount shared content from other 139Yun users. You need a valid authorization to access download APIs.
-:::
+## 分享挂载
-::: zh-CN
`share`(分享挂载)类型允许你挂载其他移动云盘用户分享的内容。访问下载接口仍需要有效的鉴权。
-:::
### LinkID format
### LinkID 格式
-::: en
-`LinkID` supports the following formats:
-
-- Single share: directly enter the share link ID
-- Password-protected share: `link_id#password`
-- Multiple shares: separate multiple entries with commas or new lines. For example: `share_a,share_b,share_c` or `share_a#pass1,share_b`
-
-:::
-
-::: zh-CN
`LinkID`(分享链接 ID)支持以下格式:
- 单个分享:直接填写分享链接 ID
- 加密分享:`link_id#password`(链接 ID 后加 `#` 和密码)
- 多个分享:多个分享用逗号或换行分隔,例如:`share_a,share_b,share_c` 或 `share_a#密码1,share_b`
-:::
-
-### Get share link ID { lang="en" }
-
-### 获取分享链接 ID { lang="zh-CN" }
-
-::: en
-
-1. Open the share link in your browser, e.g. `https://yun.139.com/w/#/share/xxxxx`
-2. The path segment after `/share/` is the share link ID (e.g. `xxxxx`)
-3. If the share is password-protected, append `#password` after the link ID
-
-:::
-
-::: zh-CN
+### 获取分享链接 ID
1. 在浏览器中打开分享链接,例如 `https://yun.139.com/w/#/share/xxxxx`
2. 链接中 `/share/` 后面的路径段就是分享链接 ID(如上例中的 `xxxxx`)
3. 如果分享有密码保护,在链接 ID 后加 `#密码`
-:::
-
-### Configuration { lang="en" }
-
-### 配置说明 { lang="zh-CN" }
-
-::: en
-
-- **Type**: `share`
-- **LinkID**: one or more share link IDs (see format above)
-- **Authorization** or **MailCookies + Username + Password**: required for authentication (same as other types)
-- **Root folder ID**: not used for share type. The share link ID in `LinkID` determines the mounted content.
-- **Cloud ID**: leave empty
-
-Notes:
-
-- Upload operations are not supported for the `share` type.
-- When mounting multiple shares, the root directory shows each share as a separate folder.
-- `${data_path}` resolves to the share root for path-based operations.
-
-:::
-
-::: zh-CN
+### 配置说明
- **类型**:`share`(分享挂载)
- **LinkID**:一个或多个分享链接 ID(格式见上方)
@@ -482,37 +195,8 @@ Notes:
- 挂载多个分享时,根目录会以文件夹形式展示每个分享的内容。
- path 相关操作会以分享根目录作为 `${data_path}`。
-:::
+## 下载方式
-## Download method { lang="en" }
-
-## 下载方式 { lang="zh-CN" }
-
-::: en
-The default download method is 302 redirection. If a player such as PotPlayer cannot play through 302, switch that mount to proxy mode or mount it through WebDAV with `WebDAV Native Proxy`.
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-
-::: zh-CN
默认下载方式是 302 跳转。如果 PotPlayer 等播放器无法通过 302 播放,可以将该挂载切换为代理模式,或通过启用 `WebDAV 本地代理` 的 WebDAV 挂载播放。
```mermaid
@@ -533,5 +217,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/163music.md b/pages/guide/drivers/163music.md
index e55cc21d7..82f3e1b46 100644
--- a/pages/guide/drivers/163music.md
+++ b/pages/guide/drivers/163music.md
@@ -1,40 +1,18 @@
---
-title:
- en: 163 Music Drive
- zh-CN: 网易云音乐云盘
-icon: iconfont icon-state
-# This control sidebar order
top: 677
-# A page can have multiple categories
categories:
- guide
- drivers
---
+# 网易云音乐云盘
+
-::: en
-163 Music Drive can only upload music and other operations on the mobile phone, and the web page cannot operate
-:::
-::: zh-CN
网易云音乐云盘需要在手机端才可以进行上传音乐等操作,网页端无法操作
-:::
-
-## Cookie { lang="en" }
-
-## Cookie { lang="zh-CN" }
-
-::: en
-Open **https://music.163.com** and then open the F12 developer mode
-
-Open a request at will, just carry the `Cookie` to find the following two parameters and fill in the OpenList` Cookie`
-
-- **\_\_csrf** 、**MUSIC_U**
- 
-:::
+## Cookie
-::: zh-CN
进入 **https://music.163.com** 然后打开F12开发者模式
随意打开一个请求只要携带 `Cookie` 找到以下两个参数填写进OpenList的 `Cookie` 中就可以使用
@@ -42,64 +20,16 @@ Open a request at will, just carry the `Cookie` to find the following two parame
- **\_\_csrf** 、**MUSIC_U**

-:::
+## 歌曲获取上限
-## Song Limit { lang="en" }
-
-## 歌曲获取上限 { lang="zh-CN" }
-
-::: en
-You can only get 200 songs by default. If you exceed you, you can modify this option
-:::
-::: zh-CN
默认只能获取200首歌曲,如果你超出可以修改此选项
-:::
-
-### Precautions { lang="en" }
-
-### 注意事项 { lang="zh-CN" }
-::: en
-
-1. If there are many list files, it is recommended to open pagination loading, otherwise it will not be loaded
-2. Cloud space can only upload audio format files, and cannot upload other format files
-
-:::
-
-::: zh-CN
+### 注意事项
1. 如果列表文件很多,建议开启分页加载
2. 云空间只可以上传音频格式文件,无法上传其它格式文件
-:::
-
-### The default download method used { lang="en" }
-
-### 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+### 默认使用的下载方式
```mermaid
---
@@ -119,5 +49,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/189.md b/pages/guide/drivers/189.md
index e84429d70..b400f0850 100644
--- a/pages/guide/drivers/189.md
+++ b/pages/guide/drivers/189.md
@@ -1,43 +1,22 @@
---
-title:
- en: 189Cloud
- zh-CN: 电信天翼云盘
-icon: iconfont icon-state
-# This control sidebar order
top: 694
-# A page can have multiple categories
categories:
- guide
- drivers
-# A page can have multiple tags
-tag:
- - Storage
- - Guide
- - '302'
-# this page is sticky in article list
-sticky: true
-# this page will appear in starred articles
-star: true
---
-
-
-::: en
-::: tip
-The web -side login has been replaced with sliding verification code, **no longer supports OCR or manual input**. If the verification code needs to be used, please use the add `Cookie` to log in
+# 电信天翼云盘
-If you encounter "Device ID does not exist, secondary device verification required",Open the 189 Account website at , log in, and then disable the Device Lock..
+
-::: zh-CN
::: tip
Web 端登录已更换为滑动验证码,**不再支持 OCR 与手动输入**,若需要验证码请使用 `添加 Cookie 进行登录` 或使用 `天翼云盘客户端` 驱动
如遇 **设备 ID 不存在,需要二次设备校验**,打开天翼账号网站 ,登陆后关掉设备锁即可
:::
-## 189CloudTV { lang="zh-CN" }
+## 189CloudTV
-::: zh-CN
使用天翼网盘的TV接口,挂载步骤最少。
(部分用户反馈存在限速问题,如果播放视频卡顿黑屏等无法加载的现象请改用天翼网盘客户端)
@@ -52,69 +31,18 @@ Web 端登录已更换为滑动验证码,**不再支持 OCR 与手动输入**
-:::
-
-## 189CloudTV { lang="en" }
-
-::: en
-Uses the TV interface of 189 Cloud Drive, with the fewest mounting steps.
-
-(Some users have reported throttling issues. If you experience video playback stuttering, black screens, or failure to load, please switch to the 189 Cloud PC client.)
-
-1. When mounting, select 189CloudTV. Leave the login parameters blank. If you are unsure, **just fill in the mount path**.
-
-2. After clicking save, simply return to the storage management page. You can choose to log in by scanning a QR code or click the link to log in (for link login, if you are unsure, it is recommended to **right-click the link and open it in a new window**).
+## 个人云
-
+### 用户名
-3. After entering, select SMS login. Once logged in, return to the storage management page. Disable and re-enable the storage to use it normally (you may need to refresh the page).
-
-
-
-:::
-
-## 个人云 { lang="zh-CN" }
-
-## Personal Cloud { lang="en" }
-
-### Username { lang="en" }
-
-### 用户名 { lang="zh-CN" }
-
-::: en
-the phone number used to log in
-:::
-::: zh-CN
用于登录的电话号码
-:::
-
-### 密码 { lang="zh-CN" }
-### Password { lang="en" }
+### 密码
-::: en
-password for login
-:::
-
-::: zh-CN
登录密码
-:::
-### 根文件夹ID { lang="zh-CN" }
-
-### Root folder ID { lang="en" }
-
-::: en
-The string at the end of the official website url, such as:
-
-- https://cloud.189.cn/web/main/file/folder/-11 -> `-11`
-- https://cloud.189.cn/web/main/file/folder/71398114617385472 -> `71398114617385472`
+### 根文件夹ID
- 
-
-:::
-
-::: zh-CN
官网 URL 末尾的字符串,如:
- https://cloud.189.cn/web/main/file/folder/-11 -> `-11`
@@ -122,113 +50,39 @@ The string at the end of the official website url, such as:

-:::
-
-### 家庭云中转 { lang="zh-CN" }
-
-### Family transfer { lang="en" }
-
-::: en
-Give 189 Cloud adds Personal's `Family Transfer option`, which is convenient for users without VIP, and a large number of family cloud spaces upload.
-
-- Note: The old upload interface family cloud will still limit the upload quantity, so `Rapid upload` and ` Old Upload` will not take effect
+### 家庭云中转
-:::
-::: zh-CN
为天翼云盘增加个人云使用`家庭云中转选项`,方便不开会员且家庭云空间小情况下大量上传。
- 注:旧的上传接口家庭云依然会限制上传量,所以`秒传选项`和`旧的上传方式`不生效
-:::
-
-## 家庭云 { lang="zh-CN" }
-
-## Family Cloud { lang="en" }
-
-::: en
-(189 Cloud PC Driver Only) Use a computer browser, open the developer tool (F12), switch the emulation device and select the mobile device
+## 家庭云
-Open https://h5.cloud.189.cn/main.html#/family, enter the folder you want to mount, you can see the request in the network, and then find the required parameters:
-:::
-
-::: zh-CN
(天翼云盘客户端驱动专用)使用电脑浏览器,打开开发者工具(F12),切换仿真设备选择手机设备
打开https://h5.cloud.189.cn/main.html#/family ,进入你想挂载的文件夹,可在网络中看到请求,然后找到所需参数:
-:::

-### OpenList挂载填写示例: { lang="zh-CN" }
-
-### OpenList fill in examples: { lang="en" }
-
-#### 天翼云盘 { lang="zh-CN" }
+### OpenList挂载填写示例:
-#### 189 Cloud { lang="en" }
+#### 天翼云盘
-::: en
-Fill in the account1and password2,Then click one request in the request, just bring `Cookies`3, click on one at will Then fill in,Cookie expires time is unknown
-:::
-
-::: zh-CN
填写帐号1和密码2,然后在请求中随便点击一个请求随意点击一个携带`Cookie`3的参数复制填写,Cookie有效期未知。
-:::

-#### 天翼云盘客户端 { lang="zh-CN" }
-
-#### 189 CloudPC { lang="en" }
+#### 天翼云盘客户端

-::: en
-Video reference: **https://www.bilibili.com/video/BV16A4y197De**
-:::
-::: zh-CN
视频参考:**https://www.bilibili.com/video/BV16A4y197De**
-:::
-
-## 建议 { lang="zh-CN" }
-## suggestion { lang="en" }
+## 建议
-::: en
-It is recommended to use the 189 Cloud PC first, [**Notes click to view.**](../../faq/howto.md#when-adding-a-189-cloud-storage-the-device-id-does-not-exist-and-a-secondary-device-verification-is-required)
-:::
-::: zh-CN
建议首选使用天翼云盘客户端,[**注意事项点击查看**](../../faq/howto.md#添加-天翼云盘-云存储时-设备-id-不存在-需要二次设备验证)
-:::
-### 默认使用的下载方式 { lang="zh-CN" }
-
-### The default download method used { lang="en" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-
-::: zh-CN
+### 默认使用的下载方式
```mermaid
---
@@ -248,5 +102,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/alias.md b/pages/guide/drivers/alias.md
index 74f94447f..8378c126c 100644
--- a/pages/guide/drivers/alias.md
+++ b/pages/guide/drivers/alias.md
@@ -1,22 +1,10 @@
---
-title:
- en: Alias
- zh-CN: 别名(Alias)
-icon: iconfont icon-state
-# This control sidebar order
top: 997
-# A page can have multiple categories
categories:
- guide
- drivers
-# A page can have multiple tags
-tag:
- - Storage
- - Guide
-# this page is sticky in article list
-sticky: true
-# this page will appear in starred articles
-star: true
---
+# 别名(Alias)
+
diff --git a/pages/guide/drivers/alias_text.md b/pages/guide/drivers/alias_text.md
index 86c6c72da..5a6894cde 100644
--- a/pages/guide/drivers/alias_text.md
+++ b/pages/guide/drivers/alias_text.md
@@ -1,35 +1,3 @@
-::: en
-
-**Alias** is a feature that allows multiple different cloud drives or storage paths to be merged into a unified directory. By combining paths, content from different cloud drives or folders can be displayed in the same interface, simplifying access and management.
-
-For example: Cloud Drive Account 1 and Cloud Drive Account 2 both contain a folder named `Movies`, but the contents of these folders may not be identical.
-
-- **Previously (Virtual Path)**:
-
- You could only mount them to two different paths separately, like:
- - `CloudDrive1/Movies`, `CloudDrive2/Movies`
- - `Movies/CloudDrive1`, `Movies/CloudDrive2`
-
-- **Now (Alias)**:
-
- An aggregated folder (Movies) is provided, which can contain content from both Cloud Drive 1 and Cloud Drive 2 simultaneously.
-
-Folders with the same name will be automatically merged into one. The contents of the folder are the sum of the contents of all folders with the same name. Regarding how this driver handles files with the same name, please refer to the [Path conflict policies](/guide/drivers/alias#path-conflict-policies) section later.
-
-For Example:
-
-
-
-In the diagram, we can see that two different folders are merged into one. Files and folders with the same name are also combined, and unique ones are displayed separately.
-
-Example explanations:
-
-- **Example 1**: `riluo.jpg` is unique to Cloud Drive 1, so it is shown separately.
-- **Example 2**: Both folders contain a `video` folder, but the contents of these folders will be merged. Subfolders also follow the **same-name merging** display rule. Both folders contain two videos, but one of them has the same name. After merging according to the **same-name merging** rule, three video files will be displayed in total.
-
-:::
-::: zh-CN
-
**别名(Alias)** 是一种将多个不同云盘或存储路径合并为一个统一目录的功能。通过路径合并,来自不同云盘或文件夹的内容可以在同一界面中展示,从而简化访问和管理。
例如:云盘账号1和云盘账号2中都包含一个名为`电影`的文件夹,但两者的内容未必完全相同。
@@ -57,39 +25,8 @@ Example explanations:
- **例1**:`riluo.jpg` 仅存在于云盘1中,因此显示为独有文件。
- **例2**:两个文件夹都有一个名为`video`的子文件夹。合并后,两个`video`文件夹的内容会合并展示。若其中有同名文件(例如`movie.mp4`),合并后最终展示3个视频文件。
-:::
-
-## Paths filling method { lang="en" }
+## 路径填写方式
-## 路径填写方式 { lang="zh-CN" }
-
-::: en
-There are two ways to fill in:
-
-1. The first one is that you can only fill in the path of the subfolder and the folder with the same name must be used at the end. It is not recommended to use :x:
- - Paths filling example:
- ```
- /file1/locala
- /file2/localb
- ```
-2. The second is to directly mount the root folder path, using the `renaming` method, it is strongly recommended to use :heavy_check_mark:
- - Paths filling example:
-
- ```
- #Example 1 Directly write the root folder
- merge: /file1
- merge: /file2
-
- #Example 2 Mount different path folders for merging
- merge: /file1/localtest233
- merge: /file2/videos/TV series
- merge: /file3 2/TV/Domestic TV Series/Station XX
- ```
-
-According to the second method, we can `merge` and display different folders, which is convenient and quick.
-:::
-
-::: zh-CN
填写方式有两种:
1. 第一种是只可以填写子文件夹路径并且最后结尾时必须同名文件夹才可以,不推荐使用 :x:
@@ -113,91 +50,13 @@ According to the second method, we can `merge` and display different folders, wh
```
根据第二种这样我们可以将不同的文件夹进行合并显示,方便快捷。
-:::
-
-## Path conflict policies { lang="en" }
-## 路径冲突策略 { lang="zh-CN" }
+## 路径冲突策略
-::: en
-The three configuration items—**Reading conflict policy**, **Writing conflict policy**, and **Putting conflict policy**—determine how the Alias handles files or folders with the same name and identical paths in the backend drivers. Their values and corresponding behaviors are as follows:
-
-:::
-::: zh-CN
**读取冲突策略**、**写入冲突策略**和**上传冲突策略**三个配置项确定了别名驱动如何处理后端驱动中路径相同的同名文件或文件夹,其值与对应的行为如下:
-:::
-
-### Reading conflict policy { lang="en" }
-
-### 读取冲突策略 { lang="zh-CN" }
-
-::: en
-Determines the behavior for handling files with the same name when downloading, copying (as source files), and extracting (as source files) (excluding moving).
-
-- Get the file corresponding to the first conflict path: Select the file from the first available path (from top to bottom in the Paths) where the file exists.
-
-- Load balancing on a per-file basis: Randomly select one file from the available duplicates.
+### 读取冲突策略
-- Load balancing on a per-part basis:
- - During 302 downloads, copying, or extracting, it falls back to the **Load balancing on a per-file basis** strategy.
- - When using local proxy downloads, each transmitted chunk is randomly assigned to one of the duplicate files. This requires the backend driver to support Range requests. For details on setting the chunk size, refer to the section [Download concurrency, Download part size](/guide/drivers/alias#download-concurrency-download-part-size).
- - This policy achieves the actual effect as shown in the figure. It is important to note that this diagram is only intended to conveniently demonstrate the operation of this policy. The statement that "participating load-balanced files with the same name have different contents" is **not** a correct usage of this driver. OpenList does not guarantee stable or correct results under such circumstances, nor will it address any issues arising from this usage scenario. Furthermore, the actual minimum size for file splitting is 1 KiB, not 1 byte, so the effect depicted in the diagram will not occur in the stable version.
-
- 
-
-::: tip
-When a copy operation involves multiple source paths and target paths, the Alias will first attempt to pair source and target paths that belong to the same drive. Only for target paths that cannot be matched in this way will the method specified by the **Reading conflict policy** be used to select a source path.
-
-For example, when copying:
-
-- `DriverA/source/file.txt`
-- `DriverB/source/file.txt`
-
-to:
-
-- `DriverB/target/`
-- `DriverA/target/`
-- `DriverC/target/`
-
-The Alias driver will perform the following operations:
-
-1. Copy `DriverA/source/file.txt` to `DriverA/target/`, since both are located in Driver A.
-2. Copy `DriverB/source/file.txt` to `DriverB/target/`, since both are located in Driver B.
-3. For `DriverC/target/`, which has no matching source in the same driver, select `file.txt` from either Driver A or Driver B according to the **Reading conflict policy**, and copy it to `DriverC/target/` via an upload operation (creating a copy task).
-
-:::
-::: en
-::: tip
-The move operation involves a matching process similar to that of the copy operation. For target paths that cannot be matched with a source path from the same driver, the Alias will randomly select from the still-unmatched source paths to create a pairing (**one-to-one correspondence**). If the number of source paths exceeds the number of target paths, the unmatched source paths will be deleted. If the number of source paths is less than the number of target paths, the move operation will fail. The matching behavior for the move operation is not affected by the **Reading conflict policy**.
-
-For example, in the case described for the copy operation, since there is no source path corresponding to `DriverC/target/`, the move operation will fail.
-
-As another example, when moving:
-
-- `DriverA/source/file.txt`
-- `DriverB/source/file.txt`
-- `DriverD/source/file.txt`
-- `DriverE/source/file.txt`
-- `DriverG/source/file.txt`
-
-to:
-
-- `DriverA/target/`
-- `DriverB/target/`
-- `DriverC/target/`
-- `DriverF/target/`
-
-The Alias will perform the following operations:
-
-1. Move `DriverA/source/file.txt` to `DriverA/target/`.
-2. Move `DriverB/source/file.txt` to `DriverB/target/`.
-3. Randomly select one file from Driver D, E, or G, and move it to `DriverC/target/` (by creating a move task, which is essentially an upload followed by deletion). Let's assume E is selected.
-4. Randomly select one file from the remaining unmatched drivers (D or G), and move it to `DriverF/target/`. Let's assume G is selected.
-5. Delete `DriverD/source/file.txt`.
-
-:::
-::: zh-CN
影响下载、复制(作为源文件)、解压(作为源文件)(没有移动)同名文件的方式。
- 读取首个有效路径:选择填写的所有路径中从上到下第一个存在该文件的路径中的同名文件。
@@ -230,7 +89,7 @@ The Alias will perform the following operations:
3. 按照**读取冲突策略**给出的方案选择驱动 A 或 B 中的`file.txt`,通过上传的方式(创建复制任务)复制到`驱动C/target/`。
:::
-::: zh-CN
+
::: tip
移动操作存在与复制操作类似的匹配过程,对于未获得匹配的目标路径,随机选择同样未被匹配的源路径进行匹配(**一一对应**),源路径数量超过目标路径时,未得到匹配的源路径会被删除,源路径数量少于目标路径时,移动操作会失败。移动操作的匹配行为不会受到**读取冲突策略**的影响。
@@ -261,54 +120,8 @@ The Alias will perform the following operations:
:::
-### Writing conflict policy { lang="en" }
-
-### 写入冲突策略 { lang="zh-CN" }
-
-::: en
-Determines the behavior for renaming or deleting files/folders with the same name, as well as creating folders within identically named folders.
-
-- **Disable writing**: Prohibits rename, delete, and folder creation operations.
-- **Write into the first conflict path**: Operates on the driver containing the target path that appears first (top to bottom) in the configured path list.
-- **Allow unique path**: Executes the operation only if the target path is unique (exists in only one backend path). Otherwise, the operation is prohibited.
-- **Allow full conflict paths**: Executes the operation only if the target path exists in **all** configured backend paths, applying the operation across all of them. Otherwise, the operation is prohibited.
-- **Allow unique path and full conflict paths**: Allows the operation when the target path is either unique or exists in all configured backend paths.
-- **Write into all conflict paths**: Forwards the operation to all backend paths where the target path exists.
-
-::: tip
-If the above explanation is unclear, you can refer to the following example.
-
-- In Driver A, the file exists: `file1.txt`
-- In Driver B, the files exist: `file1.txt`, `file2.txt`, `file3.txt`
-- In Driver C, the files exist: `file1.txt`, `file3.txt`
-
-Configured backend paths:
-
-```
-test:DriverA
-test:DriverB
-test:DriverC
-```
-
-Then:
-
-- Since the sub-path `/file1.txt` is valid in all configured paths (`DriverA/`, `DriverB/`, `DriverC/`), `/file1.txt` is referred to as a **full conflict path**.
-- Since the sub-path `/file2.txt` is valid only under the single backend path `DriverB/`, `/file2.txt` is referred to as a **non-conflict path** or **unique path**.
-- Since the sub-path `/file3.txt` exists under both `DriverB/` and `DriverC/`, and the number of backend paths where it exists is neither 1 nor the maximum (3), `/file3.txt` is neither a non-conflict path nor a full conflict path.
+### 写入冲突策略
-When renaming any file to `file4.txt`, the corresponding files in the following drivers will be renamed:
-
-| Writing conflict policy | file1.txt | file2.txt | file3.txt |
-| ----------------------------------------- | ---------------------------- | --------- | ------------------ |
-| Disable writing | Fails | Fails | Fails |
-| Write into the first conflict path | Driver A | Driver B | Driver B |
-| Allow unique path | Fails | Driver B | Fails |
-| Allow full conflict paths | Driver A, Driver B, Driver C | Fails | Fails |
-| Allow unique path and full conflict paths | Driver A, Driver B, Driver C | Driver B | Fails |
-| Write into all conflict paths | Driver A, Driver B, Driver C | Driver B | Driver B, Driver C |
-
-:::
-::: zh-CN
影响重命名、删除同名文件或文件夹,在同名文件夹下创建文件夹的方式。
- 禁用:禁止重命名、删除和创建文件夹操作。
@@ -340,49 +153,20 @@ test:驱动C
- 由于子路径`/file3.txt`在`驱动B/`和`驱动C/`下存在,存在的后端路径数量既不为 1,也不为最大(3),因此`/file3.txt`既不是不冲突路径,也不是全冲突路径。
重命名任意文件为`file4.txt`时,以下驱动中的对应文件会被重命名:
-| 写入冲突策略 | file1.txt | file2.txt | file3.txt |
-| -- | -- | -- | -- |
-| 禁用 | 操作失败 | 操作失败 | 操作失败 |
-| 写入首个有效路径 | 驱动A | 驱动B | 驱动B |
-| 仅允许不冲突路径 | 操作失败 | 驱动B | 操作失败 |
-| 仅允许全冲突路径 | 驱动A、驱动B、驱动C | 操作失败 | 操作失败 |
-| 允许不冲突路径和全冲突路径 | 驱动A、驱动B、驱动C | 驱动B | 操作失败 |
-| 写入所有有效路径 | 驱动A、驱动B、驱动C | 驱动B | 驱动B、驱动C |
-
-:::
-
-### Putting conflict policy { lang="en" }
-
-### 上传冲突策略 { lang="zh-CN" }
-
-::: en
-Determines the behavior for uploading to, copying to, moving to, or extracting to folders with the same name.
-
-- **Disable putting**, **Put into the first conflict path**, **Allow unique path**, **Allow full conflict paths**, **Allow unique path and full conflict paths**, **Put into all conflict paths**: These options function identically to their counterparts in the **Writing conflict policy**.
-- **Random load balancing**: Randomly selects one valid path for the upload.
-- **Weighted random load balancing based on remaining space**: Retrieves the remaining free space of all valid paths, skips paths that fail to report free space or have insufficient space for the file being uploaded, and then randomly selects from the remaining valid paths, weighting the choice by their remaining capacity. If none of the valid paths that successfully reported free space have enough capacity for the file, **a random selection is made from among the valid paths that failed to report capacity**.
-- **Strict weighted random load balancing based on remaining space**: Retrieves the remaining free space of all valid paths, skips paths that fail to report free space or have insufficient space for the file being uploaded, and then randomly selects from the remaining valid paths, weighting the choice by their remaining capacity. If none of the valid paths that successfully reported free space have enough capacity for the file, **an error message is returned directly**.
-::: tip
-The load balancing mechanisms within the **Reading conflict policy** and the **Putting conflict policy** are two largely unrelated features. Informally speaking, the load balancing in the **Reading conflict policy** is analogous to RAID 1, while the load balancing in the **Putting conflict policy** is analogous to RAID 0. For specific use cases of each, please refer to [Advanced / Load balancing](/guide/advanced/balance).
-
-If you've understood the above, you'll realize that enabling both **Reading Load Balancing** and **Putting Load Balancing** won't make load balancing more balanced. In fact, this configuration produces effects that are hardly any different from enabling only **Putting Load Balancing**.
+| 写入冲突策略 | file1.txt | file2.txt | file3.txt |
+| -------------------------- | ------------------- | --------- | ------------ |
+| 禁用 | 操作失败 | 操作失败 | 操作失败 |
+| 写入首个有效路径 | 驱动A | 驱动B | 驱动B |
+| 仅允许不冲突路径 | 操作失败 | 驱动B | 操作失败 |
+| 仅允许全冲突路径 | 驱动A、驱动B、驱动C | 操作失败 | 操作失败 |
+| 允许不冲突路径和全冲突路径 | 驱动A、驱动B、驱动C | 驱动B | 操作失败 |
+| 写入所有有效路径 | 驱动A、驱动B、驱动C | 驱动B | 驱动B、驱动C |
:::
-::: en
-::: tip
-The legacy version of the Alias used three Boolean configuration items—**Writable**, **Protect same name**, and **Parallel write**—to implement path conflict policy functionality. The correspondence between the legacy configuration and the new configuration is as follows:
-- In the legacy configuration, the **Reading conflict policy** was always set to **Get the file corresponding to the first conflict path**.
-- In the legacy configuration, when **Writable** was disabled, both the **Writing conflict policy** and the **Putting conflict policy** were set to **Disabled**.
-- When **Writable** was enabled, the **Writing conflict policy** and the **Putting conflict policy** were both determined as follows:
- | | Parallel write disabled | Parallel write enabled |
- | -- | -- | -- |
- | Protect same name enabled | Allow unique path | Allow unique path and full conflict paths |
- | Protect same name disabled | Write/Put into the first conflict path | Write/Put into all conflict paths |
+### 上传冲突策略
-:::
-::: zh-CN
影响上传到、复制到、移动到、解压到同名文件夹的方式。
- 禁用、上传到首个有效路径、只允许不冲突路径、只允许全冲突路径、允许不冲突路径和全冲突路径、上传到所有有效路径:与**写入冲突策略**中的对应选项相同。
@@ -396,76 +180,37 @@ The legacy version of the Alias used three Boolean configuration items—**Writa
一旦理解了上述原理,你就会明白同时开启**读取负载均衡**和**上传负载均衡**并不能让你负载得均均又衡衡,这种配置产生的效果和仅开启**上传负载均衡**没有什么太大的区别。
:::
-::: zh-CN
+
::: tip
旧版别名驱动使用**可写**、**保护同名**和**并行写入**三个布尔配置项实现路径冲突策略功能,旧版配置与新版配置的对应关系如下:
- 在旧版配置中,**读取冲突策略**总为**读取首个有效路径**。
- 在旧版配置中,当**可写**关闭时,**写入冲突策略**与**上传冲突策略**均为**禁用**。
- 当**可写**开启时,**写入冲突策略**与**上传冲突策略**均为
- | | 关闭并行写入 | 开启并行写入 |
- | -- | -- | -- |
- | 开启保护同名 | 仅允许不冲突路径 | 允许不冲突路径和全冲突路径 |
- | 关闭保护同名 | 写入/上传到首个有效路径 | 写入/上传到所有有效路径 |
+ | | 关闭并行写入 | 开启并行写入 |
+ | ------------ | ----------------------- | -------------------------- |
+ | 开启保护同名 | 仅允许不冲突路径 | 允许不冲突路径和全冲突路径 |
+ | 关闭保护同名 | 写入/上传到首个有效路径 | 写入/上传到所有有效路径 |
:::
-## File consistency check { lang="en" }
-
-## 文件一致性校验 { lang="zh-CN" }
-
-::: en
-When enabled, the driver will filter out paths where the **size or hash value** differs from other copies during the process of collecting valid paths. This is a safety measure, and whether it is enabled has relatively minor impact. It is recommended to enable this option when using the **Load balancing on a per-part basis** reading policy.
-
-Regardless of whether this option is enabled, the Alias does not actively calculate file hashes. Instead, it performs a best-effort match using the hash values returned by the backend drivers.
-
-Different types of hash values returned by backend drivers will not lead to misjudgment. For example, if Driver 1 returns the MD5 of a file and Driver 2 returns the SHA1 of the file, even with this option enabled, the Alias will not consider either path from Driver 1 or Driver 2 invalid simply because the file's MD5 and SHA1 are not equal.
+## 文件一致性校验
-:::
-::: zh-CN
开启时,驱动在收集有效路径的过程中,会过滤掉那些**大小或哈希值**与其它副本不同的路径,是一种安全措施,开启与否影响不太大,推荐使用**按分片负载均衡**读取策略时打开。
无论是否启用该选项,别名都不会主动计算文件的哈希值,而是使用后端驱动返回的哈希值做尽力而为的匹配。
后端驱动返回不同种类的哈希值不会导致误判。例如驱动 1 返回了文件的 MD5,驱动 2 返回了文件的 SHA1,即便开启本选项,别名也不会因为文件的 MD5 与 SHA1 不相等而判定驱动 1 或 2 中的任何一个路径无效。
-:::
-
-## The download method to use { lang="en" }
-
-## 使用的下载方式 { lang="zh-CN" }
-
-::: en
-When adding **`alias`**, `Web Proxy` and `Webdav Policy` are not modified by default. The storage path filled in the Paths path can be `302`, `Local Proxy`, `Download Proxy URL`, three modes Mixed Playback Mixed Playback is possible.
+## 使用的下载方式
-If you checked `Web Proxy`, the storage filled in by the Paths path, if there is a 302 mode playback, it will be played in transit (local proxy mode) at that time, and it will become a proxy mode. If the Webdav policy is also changed, it will also change.
-
-Of course, it is up to you to choose whether to change the mode.
-:::
-::: zh-CN
添加 **`别名-alias`** 时 `Web代理` 和 `Webdav策略` 默认不修改的情况下 Paths路径填写的存储路径可以 `302`,`本地代理`,`下载代理URL`,三种模式混合播放可以进行混合播放。
如果你勾选了`Web代理` ,Paths路径填写的存储 如果有302模式播放的 到时候都会进行中转(本地代理模式)播放,变成代理模式,Webdav策略如果也进行了改动也会进行变化。
当然,是否选择更换模式您自己进选择。
-:::
-
-### What if you don’t know how the cloud disks you added are different? { lang="en" }
-### 如果你不知道你添加的云盘是什么方式怎么办? { lang="zh-CN" }
-
-::: en
-
-1. You can go to the bottom of the corresponding document to view the document, there is a flow chart description
- - If there is a 302, the 302 method is used by default. If there are only local proxy and download proxy URLs, the default is to use the local proxy, provided that you have not manually selected
-2. You can check when adding storage, select the corresponding storage to view, for example, let’s check the methods of Alibaba Cloud and 115 respectively
- - As you can see from the figure below, Alibaba Cloud Disk has the option of `web proxy`, and `webdav policy` defaults to 302. It can be judged that Alibaba Cloud Disk uses the 302 method by default
- - As you can see from the figure below, the 115 network disk does not have the option of `web proxy`, and the `webdav strategy` defaults to the local proxy. It can be judged that the 115 network disk uses the local proxy mode by default
- 
-
-:::
-
-::: zh-CN
+### 如果你不知道你添加的云盘是什么方式怎么办?
1. 可以前往文档的相对应的文档最底部查看,有一份流程图说明
- 如果有302的就是默认使用302方式,如果只有本地代理和下载代理URL默认的就是使用本地代理,前提是你没有进行手动选择
@@ -474,75 +219,16 @@ Of course, it is up to you to choose whether to change the mode.
- 从下图中看到,115网盘没有 `web代理`选择,`webdav策略`默认是本地代理,可以判断出115网盘默认使用的是本地代理方式

-:::
-
-## Proxy Range { lang="en" }
+## 代理 Range
-## 代理 Range { lang="zh-CN" }
-
-::: en
-You need to enable `Web Proxy` or` Webdav Native Proxy` to take effect. Currently only applicable to:`alias`、`139Yun`、`OpenList V3`.
-
-- The `139Yun` driver, when this option is enabled, can resolve issues that occur when a proxy is enabled but the download link does not return the correct HTTP status code, such as problems with video playback or lack of support for resume downloads.
-- The `Alias` driver is added to meet specific use cases, for example, when `139Yun` uses a 302 redirect. By enabling the `Alias` proxy, downloads can use `139Yun` with the 302 redirect, while video playback can use the proxy-enabled `Alias`, reducing unnecessary load.
-- The `OpenList` driver is added to support server-side OpenList mounting with `139Yun` using a 302 redirect. Locally, OpenList can be mounted via the proxy-enabled `OpenList` to access the server's OpenList for video playback, etc., to avoid consuming server bandwidth. This also allows for data-free video streaming on mobile networks.
-
-:::
-
-::: zh-CN
需要先启用 `Web代理` 或者 `Webdav本地代理` 才会生效。目前仅适用于:`别名`、`中国移动云盘`、`OpenList V3`。
- `139Yun` 驱动开启这个选项后,可解决即使开启代理但下载链接没有返回正确的http状态码导致的一些问题,例如视频无法播放、不支持断点续传等
- `Alias` 驱动添加是为了满足某些场景,例如 `139Yun` 走302, 然后通过 开启代理的 `Alias` 后,下载用 `139Yun` 走302,播放视频用 开启代理的 `Alias`,减少不必要的负载
- `OpenList` 驱动添加是为了 服务器的 OpenList 挂载 `139Yun` 走302,然后本地的 OpenList 通过 开启代理的 `OpenList` 挂载 服务器的 OpenList 播放视频等,达到不消化服务器流量的目的,移动卡还能免流
-:::
-
-## Download concurrency, Download part size { lang="en" }
-
-## 下载并发、下载分片大小 { lang="zh-CN" }
-
-::: en
-**Storage Settings:**
-
-- Alias (Alias) Drive
-- Local Proxy
-- Path: / Cloud Drive Mount Path
-- Download Concurrency: 10
-- Download Chunk Size: 1024
-
-**Effect:**
-
-- Client → OpenList Alias Drive: Uses 1 connection
-- OpenList Alias Drive → Cloud Drive: Supports 10 concurrent connections, with actual concurrency limited by the cloud drive.
-
-```mermaid
-graph LR
- A[Client] -->|Connection 1| B[OpenList Alias Drive]
- B -->|Concurrent Connection 1| C[Cloud Drive]
- B -->|Concurrent Connection 2| C
- B -->|Concurrent Connection 3| C
- B -->|Concurrent Connection 4| C
- B -->|Concurrent Connection 5| C
- B -->|Concurrent Connection 6| C
- B -->|Concurrent Connection 7| C
- B -->|Concurrent Connection 8| C
- B -->|Concurrent Connection 9| C
- B -->|Concurrent Connection 10| C
-```
-
-- Single-threaded speed is slower, but it supports concurrency: Using the alias drive allows concurrent downloads, significantly improving speed.
-- Video watching and download acceleration: The experience is enhanced by increasing concurrency.
-- Copying from alias drive to other drives: File transfer is also accelerated in this case.
+## 下载并发、下载分片大小
-**Friendly Reminder:** Please do not abuse this feature. Excessive use may cause abnormal activity on the cloud drive account, and you will bear the consequences.
-
-**Configuration Options:**
-
-- max_concurrency: Sets the maximum concurrency for the local proxy. The default is 64, and setting it to 0 means no limit on concurrency.
-
-:::
-::: zh-CN
**存储设置:**
- 别名 (Alias) 驱动
@@ -581,27 +267,8 @@ graph LR
- `max_concurrency`:设置本地代理的最大并发数,默认为 64,设置为 0 表示不限制并发数。
-:::
-
-## Other instructions { lang="en" }
-
-## 其他说明 { lang="zh-CN" }
-
-::: en
-
-If you are using `Windows`, the following situation will occur, and folders with different capitalization will also be regenerated.
+## 其他说明
-For example, Local 1 and Local 2 have a lowercase v for `video` respectively, and the folder OneDrive has an uppercase V `Video` folder.
-
-Then a lowercase video folder will be generated, which contains only `local 1, local 2` files merged by two folders.
-
-At the same time, the uppercase `Video` will gather the files of the three folders.
-
-This is because Windows is case-insensitive, video and Video will be considered as the same folder, you will not have this problem if you switch to Linux or Mac.
-
-:::
-
-::: zh-CN
如果你是使用的`Windows`,会出现如下情况,有大小写不同的文件夹也会进行二次生成。
例如本地1,本地2 分别有 `video` 小写的v ,文件夹 OneDrive 有一个大写的 V `Video` 文件夹。
@@ -611,5 +278,3 @@ This is because Windows is case-insensitive, video and Video will be considered
同时大写的 `Video` 里面 会集合三个文件夹的文件
这是因为 Windows 大小写不敏感,video和Video会被认为是同一个文件夹,你换成 Linux 或者 Mac 就不会有这个问题了
-
-:::
diff --git a/pages/guide/drivers/alidoc.md b/pages/guide/drivers/alidoc.md
index e7e10c989..e67bb28f6 100644
--- a/pages/guide/drivers/alidoc.md
+++ b/pages/guide/drivers/alidoc.md
@@ -1,34 +1,16 @@
---
-title:
- en: AliDoc
- zh-CN: 钉钉文档
top: 677
categories:
- guide
- drivers
---
-::: en
-::: danger Please read the notes carefully
-This driver is currently not officially maintained by the project team.
-:::
+# 钉钉文档
-::: zh-CN
::: danger 请仔细阅读注意事项
本接口目前非项目组官方维护
:::
-::: en
-Mount DingTalk Docs web storage in OpenList.
-
-Official website:
-
-- DingTalk Docs:
-
-This driver uses DingTalk Docs web APIs captured from the browser, not the official open platform API.
-:::
-
-::: zh-CN
挂载钉钉文档网页端存储。
官方网站:
@@ -36,18 +18,7 @@ This driver uses DingTalk Docs web APIs captured from the browser, not the offic
- 钉钉文档:
本驱动使用的是从浏览器网页端抓取的钉钉文档 Web API,不是官方开放平台 API。
-:::
-
-::: en
-::: warning Stability Notice
-
-Because this driver depends on web-side APIs and Cookie authentication, it may fail when DingTalk Docs changes its frontend behavior, request format, or login flow.
-
-Please use it with that risk in mind.
-
-:::
-::: zh-CN
::: warning 稳定性提示
由于本驱动依赖网页端 API 和 Cookie 鉴权,钉钉文档一旦调整前端行为、请求格式或登录流程,就可能导致驱动失效。
@@ -56,25 +27,8 @@ Please use it with that risk in mind.
:::
-## Supported operations { lang="en" }
+## 支持的操作
-## 支持的操作 { lang="zh-CN" }
-
-::: en
-Currently supported:
-
-- List files and folders
-- Download files
-- Upload files
-- Create folders
-- Move files and folders
-- Copy files and folders
-- Rename files and folders
-- Recycle files and folders
-
-:::
-
-::: zh-CN
当前已支持:
- 列出文件和文件夹
@@ -86,26 +40,8 @@ Currently supported:
- 重命名文件和文件夹
- 删除到回收站
-:::
-
## Cookie
-::: en
-Required. DingTalk Docs web Cookie.
-
-Recommended steps:
-
-1. Open a fresh browser session or incognito window.
-2. Visit and log in to the account you want to mount.
-3. Press `F12` to open developer tools.
-4. Open the `Network` tab and refresh the page.
-5. Search for requests such as `list`, `createfolder`, or other `/box/api/` requests.
-6. Open any one of these requests and find the `Cookie` request header.
-7. Copy the complete Cookie value into OpenList.
-
-:::
-
-::: zh-CN
必填。钉钉文档网页端 Cookie。
推荐按以下步骤获取:
@@ -118,37 +54,12 @@ Recommended steps:
6. 打开任意一个请求,在请求头中找到 `Cookie`。
7. 复制完整 Cookie 值填入 OpenList。
-:::
-
-::: en
-::: warning
-Please avoid mixing multiple DingTalk accounts in the same browser environment when obtaining the Cookie.
-:::
-
-::: zh-CN
::: warning
获取 Cookie 时请尽量避免同一浏览器环境里混用多个钉钉账号。
:::
-## Root folder ID { lang="en" }
+## 根文件夹 ID
-## 根文件夹 ID { lang="zh-CN" }
-
-::: en
-Required. This is the UUID of the root folder entity used as the mount root.
-
-You can obtain it from DingTalk Docs web requests:
-
-1. Stay on the folder you want to mount as root.
-2. Open developer tools and inspect a `/box/api/v2/dentry/list` request.
-3. Find the `dentryUuid` request parameter.
-4. Use that UUID as `Root folder ID`.
-
-Usually, the personal root folder UUID is also returned in responses such as `spaceProfile.rootDentryUuid`.
-
-:::
-
-::: zh-CN
必填。这里填写作为挂载根目录的文件夹实体 UUID。
可通过钉钉文档网页请求获取:
@@ -160,24 +71,8 @@ Usually, the personal root folder UUID is also returned in responses such as `sp
有些响应里也会返回 `spaceProfile.rootDentryUuid`,个人空间根目录通常可以直接取这个值。
-:::
-
-## Notes { lang="en" }
-
-## 注意事项 { lang="zh-CN" }
-
-::: en
-
-- This driver depends on Cookie login state. If the Cookie expires, you need to refresh it manually.
-- Upload uses DingTalk Docs web upload flow, including OSS upload and final commit request.
-- Delete currently means moving the file or folder to the recycle bin, not permanent deletion.
-
-:::
-
-::: zh-CN
+## 注意事项
- 本驱动依赖 Cookie 登录态,Cookie 失效后需要手动重新获取。
- 上传走的是钉钉文档网页端上传流程,包括 OSS 上传和最终提交请求。
- 当前“删除”表示移入回收站,不是永久删除。
-
-:::
diff --git a/pages/guide/drivers/aliyundrive_open.md b/pages/guide/drivers/aliyundrive_open.md
index 097594da7..66ae4f148 100644
--- a/pages/guide/drivers/aliyundrive_open.md
+++ b/pages/guide/drivers/aliyundrive_open.md
@@ -1,51 +1,16 @@
---
-title:
- en: Aliyundrive Open
- zh-CN: 阿里云盘 Open
-icon: iconfont icon-state
-# This control sidebar order
top: 699
-# A page can have multiple categories
categories:
- guide
- drivers
-# A page can have multiple tags
-tag:
- - Storage
- - Guide
- - '302'
- - '官方'
-# this page is sticky in article list
-sticky: true
-# this page will appear in starred articles
-star: true
---
-::: en
-::: tip
-Aliyundrive Open, developed based on the official authorization API.
-:::
-::: zh-CN
+# 阿里云盘 Open
+
::: tip
阿里云盘 Open 基于官方授权 API 开发。
:::
-::: en
-::: danger Read the precautions carefully
-
-1. The refresh token obtained by this tool can only be used for **Aliyundrive open platform** storage mount method.
-2. The token filled in when OpenList is mounted should also be provided by this tool, and the previous acquisition method will not be available
-3. Not applicable to others, but only for OpenList
-4. If the same IP requests max times within minutes, **Too Many Requests** will appear. :no_entry_sign:So please do not abuse:no_entry_sign:
- - viewing files and watching video downloads are not counted. The number of times and time mentioned above are dynamic~
- - New optimization: **will only refresh the token when the request finds that the token is expired, update restart editing if the token is still valid will not refresh.**
-5. Online playback video reminder: **`ExceedCapacityForbidden`** error, the capacity exceeds restrictions, needs to be expanded or delete unnecessary files to save space,[View details](#four、)
-6. **Do not share the Alibaba cloud disk publicly, and the account is prohibited from being accessed by multiple IPs. If the account is frozen after sharing, you will be responsible for the consequences. After adding storage, please set up meta information and other measures in time to prevent the account from being frozen by {other people/crawlers} malicious [access/sharing],Other cloud disks also need to be prevented from being frozen/banned.**
-7. It is prohibited to use Alibaba Cloud Disk to build distribution services including but not limited to **`picture bed, software bed`** and **`video external link to video website playback`**, as well as some non-standard usage methods not mentioned above. If you violate the rules and are `frozen/banned`, you will be responsible for the consequences and it cannot be lifted.
-
-:::
-
-::: zh-CN
::: danger 请仔细阅读注意事项
1. 此工具获取的刷新令牌仅可以用于 **阿里云盘开放平台** 存储挂载方式
@@ -60,100 +25,25 @@ Aliyundrive Open, developed based on the official authorization API.
:::
-## 1. Necessary Conditions { lang="en" }
+## 1. 必要条件
-## 1. 必要条件 { lang="zh-CN" }
-
-::: en
-A **AliyunDrive** account is required.
-:::
-::: zh-CN
必须有 **阿里云盘** 的帐号
-:::
-::: en
-::: warning Notes
-Speed and stability are related to the performance/network of the machine running OpenList and the load on the AliYun Drive server.
-:::
-::: zh-CN
::: warning 注意事项
速度与稳定性与OpenList 的运行机器的性能/网络、阿里云盘服务器的负载有关
:::
-## 2. Preparation for Access { lang="en" }
-
-## 2. 准备接入 { lang="zh-CN" }
-
-### 2.1. Register an Application on the Open Platform (Optional; no need to create one if using the built-in key pair of OpenList/public welfare server/self-hosted server) { lang="en" }
-
-### 2.1. 开放平台注册应用(可选,如果使用OpenList/公益服务器/自建服务器内置的密钥对,则不用创建) { lang="zh-CN" }
+## 2. 准备接入
-::: en
-::: tip
-Please register an application according to the requirements of the AliYun Drive Open Platform.
-:::
-::: en
-Open Platform URL:
-:::
+### 2.1. 开放平台注册应用(可选,如果使用OpenList/公益服务器/自建服务器内置的密钥对,则不用创建)
-::: zh-CN
::: tip
请根据阿里云盘开放平台的要求注册应用
:::
-::: zh-CN
-开放平台地址:
-:::
-
-### 2.2. Obtain Tokens { lang="en" }
-
-### 2.2. 获取令牌 { lang="zh-CN" }
-
-::: en
-
-1. Visit [api.oplist.org](https://api.oplist.org) **⚠️ If using a public welfare server/self-hosted server, visit the address of the public welfare server/self-hosted server.**
-
-2. Select **AliYun Drive App Login** from the drop-down menu.
-
- 
-
- 
-
-3. If you are using the built-in key pair of `OpenList (or public welfare server/self-hosted server)` (i.e., you do not have application information from the AliYun Drive Open Platform), configure according to `3.1`, `3.2`, and `3.3`:
- 3.1. Check `Use parameters provided by OpenList`.
-
- 3.2. Leave both `Client ID (ClientID/AppID)` and `App Secret (AppKey/Secret)` blank.
-
- 3.3. Click the `Get Token` button.
-
- 
-
- 
-
-4. If you are using your own created OAuth client ID and secret, configure according to `4.1`, `4.2`, and `4.3`:
-
- 4.1. Do not check `Use parameters provided by OpenList`.
-
- 4.2. Enter your `AppId` in `Client ID` and your `AppSecret` in `App Secret`.
-
- 4.3. Click the `Get Token` button.
-
- 
-
- 
-
-5. In the pop-up window, scan the code to log in to your AliYun Drive.
-
- 
-
-6. After successful authorization, the page will display your `Access Token` and `Refresh Token`. Please copy and save these two tokens.
-
- 
-
- 
+开放平台地址:
-:::
-::: zh-CN
+### 2.2. 获取令牌
1. 访问[api.oplist.org](https://api.oplist.org) **⚠️如果使用公益服务器/自建服务器,请访问公益服务器/自建服务器的地址**
@@ -197,73 +87,9 @@ Open Platform URL:

-:::
-
-## 3. Add AliYun Drive to OpenList { lang="en" }
-
-## 3. 在 OpenList 中添加阿里云盘 { lang="zh-CN" }
+## 3. 在 OpenList 中添加阿里云盘
-### 3.1. Start Adding { lang="en" }
-
-### 3.1. 开始添加 { lang="zh-CN" }
-
-::: en
-
-1. Open the OpenList management interface and click `Storage` in the left menu.
-
-2. On the storage list page, click the `Add Storage` button in the upper right corner.
-
-3. Select the driver as `AliYun Drive (Oauth2)`.
-
-4. Enter the mount path, such as `aliyun-drive`.
-
-5. Enter the root folder ID obtained above in `Root Folder ID`. If using the root directory, enter `root`. See [Configuration Instructions/Root Folder ID](#_3-2-1-root-folder-id).
-
- 
-
- 
-
-6. Enter the refresh token obtained above in the refresh token field (if not obtained, refer to [Preparation for Access](#_2-preparation-for-access)).
-
-7. If you are using the OAuth client ID and secret provided by `OpenList (or public welfare server/self-hosted server)`, configure according to `6.1`, `6.2`, and `6.3`:
-
- 6.1. Check `Use online api`.
-
- 6.2. Leave both `Client ID (ClientID/AppID)` and `App Secret (AppKey/Secret)` blank.
-
- 6.3. Enter `https://api.oplist.org/alicloud/renewapi` in `Api url address`. If using a `public welfare server/self-hosted server`, enter the corresponding server address.
-
- 
-
- 
-
-8. If you are using your own created OAuth client ID and secret, configure according to `7.1`, `7.2`, and `7.3`:
-
- 7.1. Do not check `Use online api`.
-
- 7.2. Enter your `AppId` in `Client ID (ClientID/AppID)` and your `AppSecret` in `App Secret (AppKey/Secret)`. See [Configuration Instructions/Client ID, Secret](#_3-2-2-client-id-secret).
-
- 7.3. Leave `Api url address` blank.
-
- 
-
- 
-
-9. In the `Instant Upload` option, select whether to enable the instant upload function (optional). See [Configuration Instructions/Instant Upload](#_3-2-3-instant-upload).
-
-10. In `Removal Method`, select the way to delete files (optional), default is recycle bin. See [Configuration Instructions/Removal Method](#_3-2-4-removal-method).
-
-11. In `Cloud Drive Type`, select the cloud drive type (optional), default is `Default`. See [Configuration Instructions/Cloud Drive Type](#_3-2-5-cloud-drive-type).
-
-12. In `Livp Download Format`, select the format for downloading live photos (optional), default is `Jpeg`. See [Configuration Instructions/Livp Download Format](#_3-2-6-livp-download-format).
-
-13. In `Internal Upload`, select whether to enable internal upload (optional), default is off. See [Configuration Instructions/Internal Upload](#_3-2-7-internal-upload).
-
-14. Click the `Add` button to complete adding AliYun Drive.
-
-:::
-
-::: zh-CN
+### 3.1. 开始添加
1. 打开 OpenList 的管理界面,点击左侧菜单中的`存储`。
@@ -317,26 +143,10 @@ Open Platform URL:
14. 点击`添加`按钮,完成阿里云盘的添加。
-:::
-
-### 3.2. Configuration Instructions { lang="en" }
-
-### 3.2. 配置说明 { lang="zh-CN" }
-
-#### 3.2.1. Root Folder ID { lang="en" }
-
-#### 3.2.1. 根文件夹 ID { lang="zh-CN" }
+### 3.2. 配置说明
-::: en
-The default is `root`, displaying all cloud drive contents. If you only want to display contents within a certain folder, change it to `file_id`.
+#### 3.2.1. 根文件夹 ID
-Open the AliYun Drive official website, and when clicking into the folder to be set, click the string after the URL.
-
-For example, https://www.alipan.com/drive/folder/5fe01e1830601baf774e4827a9fb8fb2b5bf7940
-
-The file_id of this folder is `5fe01e1830601baf774e4827a9fb8fb2b5bf7940`.
-:::
-::: zh-CN
默认为`root`,展示全部云盘内容,若只想展示某文件夹內内容,可以改为`file_id`
打开阿里云盘官网,点击进入要设置的文件夹时点击 URL 后面的字符串
@@ -344,52 +154,16 @@ The file_id of this folder is `5fe01e1830601baf774e4827a9fb8fb2b5bf7940`.
如 https://www.alipan.com/drive/folder/5fe01e1830601baf774e4827a9fb8fb2b5bf7940
这个文件夹的 file_id 即为 `5fe01e1830601baf774e4827a9fb8fb2b5bf7940`
-:::

-#### 3.2.2. Client ID, Secret { lang="en" }
-
-#### 3.2.2. 客户端 ID,密钥 { lang="zh-CN" }
-
-::: en
-Normal users can leave it blank. If you have applied for official authorization, you can fill in your own. When blank, it defaults to using those provided by OpenList.
-
-- If using your own developer account, the Oauth token link must also be modified, and you must use your own developer account ID and secret to obtain the refresh token.
+#### 3.2.2. 客户端 ID,密钥
-:::
-
-::: zh-CN
正常用户不需要填写为空即可,如果自己申请了官方授权也可以使用自己的进行填写,为空时默认使用 OpenList 提供的。
- 如果使用自己的开发者帐号,Oauth令牌链接也要修改,同时也要使用自己开发者帐号ID和密钥获取刷新令牌
-:::
-
-#### 3.2.3. Instant Upload { lang="en" }
-
-#### 3.2.3. 秒传 { lang="zh-CN" }
-
-::: en
-
-- **Version v.3.22.1** new feature.
-
- Instant upload requires enabling `Instant Upload` when mounting. The prerequisite for instant upload is that the file already exists in AliYun Drive; otherwise, it will be a normal upload.
-
- Instant upload calculates the file's `sha1` value (should be correct) without requiring you to calculate it. You just need to upload, and it will automatically calculate after upload completion.
-
-- It uses the interface provided by AliYun Drive's official API. For details, see :point_right: [**Instant Upload Logic**](https://www.yuque.com/aliyundrive/zpfszx/ezlzok#y7lyH).
-
----
-
-- **Version v.3.27.0** enhances instant upload: files can be instantly transferred between `115 Network Disk` and AliYun Drive by direct copying.
- - Prerequisite: To instantly transfer a file from AliYun Drive to 115, the file must already exist in 115; otherwise, it will be a normal copy task.
- - If instantly transferring a file from 115 to AliYun Drive, enable the instant upload option for AliYun Drive; otherwise, it will be a normal upload.
- It is recommended to locally deploy an OpenList on your home computer, add a `local storage` and `AliYun Drive`, and use copy instant upload to save resources.
-
-:::
-
-::: zh-CN
+#### 3.2.3. 秒传
- **v.3.22.1** 版本 新增功能
@@ -407,24 +181,8 @@ Normal users can leave it blank. If you have applied for official authorization,
如果要使用秒传来上传文件建议在自己家用电脑本地搭建一个OpenList添加一个`本地存储`和`阿里云盘`进行复制秒传这样节省资源。
-:::
-
-#### 3.2.4. Removal Method { lang="en" }
-
-#### 3.2.4. 移除方式 { lang="zh-CN" }
-
-::: en
-If not set, it defaults to deleting to the recycle bin. If space is insufficient, you need to manually clean the recycle bin. If a file is deleted by mistake, please go to the AliYun Drive official website client to retrieve it.
+#### 3.2.4. 移除方式
-- **Recycle Bin**: Deleting in OpenList will move the file to the network disk recycle bin, occupying cloud drive space, but it can be retrieved later if deleted by mistake.
-- **Delete**: Direct deletion without staying in the recycle bin, not occupying cloud drive space, but cannot be retrieved later if deleted by mistake.
- - Note: Do not leak the Token obtained from AliYun Drive Open. If leaked by mistake, please immediately:
- - **Open AliYun Drive app → My → Settings gear icon in the upper right corner → Privacy Settings → Authorization Management → Click OpenList to view and revoke authorization**.
- - Then rescan the code to authorize for a new refresh token. Revoking authorization will invalidate all previously obtained tokens to protect your account security.
-
-:::
-
-::: zh-CN
不进行设置默认是删除到回收站內了,如果空间不够需要自己手动清理回收站/若删错文件请前往阿里云盘官网客户端进行找回恢复
- **回收站**:在OpenList删除后进入网盘回收站,会占用云盘空间,但是后期如果误删可以找回。
@@ -433,23 +191,8 @@ If not set, it defaults to deleting to the recycle bin. If space is insufficient
- **打开-阿里云盘-app-我的-右上角设置齿轮-隐私设置-授权管理-点击-openlist-进行查看和解除授权**
- 再重新扫码授权换新的刷新令牌,同时解除授权后之前获取的都会失效,以保护您账号的安全
-:::
-
-#### 3.2.5. Cloud Drive Type { lang="en" }
-
-#### 3.2.5. 云盘类型 { lang="zh-CN" }
-
-::: en
-You can select the cloud drive type according to your needs. When adding a driver using OpenList version v3.25.1 and above, the default selection is `Default`.
+#### 3.2.5. 云盘类型
-- **Default**: For users with a talent level, it defaults to displaying `non-backup file` content; for users without a talent level, it defaults to displaying `backup file` content.
-- **Resource Library**: Corresponding to the `non-backup file content` of the cloud drive.
-- **Backup Disk**: Corresponding to the `backup files` of the cloud drive.
- After AliYun Drive updated to version `6.0` in July 2024, the backup disk was changed to merge backup files and all files, but in terms of OpenAPI, it still distinguishes between `Resource Library` and `Backup Disk` types.
- 
-
-:::
-::: zh-CN
云盘类型可以选择,可以自己的需求选择不同类型,使用 v3.25.1及以上版本的OpenList添加驱动时进行设置,默认选择的是`默认`类型
- **默认**:有达人等级用户默认展示的是`非备份文件`内容,没有达人等级用户默认展示的是`备份文件`内容
@@ -458,67 +201,22 @@ You can select the cloud drive type according to your needs. When adding a drive
202407 --> 阿里云盘更新 `6.0` 版本后,备份盘变更为备份文件和全部文件合并在一起了,但是在OpenAPI方面还是区分 `资源库` 和 `备份盘` 类型

-:::
-
-#### 3.2.6. Livp Download Format { lang="en" }
-
-#### 3.2.6. Livp 下载格式 { lang="zh-CN" }
-
-::: en
-That is, iOS `live` photos cannot be parsed by non-iOS systems, so they cannot be downloaded. Now, you can choose `Jpeg` or `Mov` according to your needs.
-
-- Jpeg: The cover of the `live` photo.
-- Mov: The video frame of the `live` photo when long-pressed.
+#### 3.2.6. Livp 下载格式
-:::
-
-::: zh-CN
即 IOS`实况`照片因为非IOS系统无法解析,然后就无法下载,现根据自己的需求是需要`Jpeg`还是`Mov`
- Jpeg:就是`实况`照片所展示的封面
- Mov:长按`实况`照片的视频画面
-:::
-
-#### 3.2.7. Internal Upload { lang="en" }
-
-#### 3.2.7. 内部上传 { lang="zh-CN" }
-
-::: en
-If the server where OpenList is deployed is an AliYun ECS in the Beijing region, turning on this switch can improve file upload speed. Do not turn on this switch for servers that do not meet the requirements, otherwise, upload failures will occur.
-
-- Can `Internal Upload` be used on non-Beijing AliYun ECS? No, because AliYun Drive uses object storage in the Beijing region.
+#### 3.2.7. 内部上传
-:::
-
-::: zh-CN
如果你部署 OpenList 的服务器是阿里云北京地区ECS,打开此开关可以提升文件上传速度。不符合要求的服务器请不要打开此开关,否则会出现无法上传的问题。
- **内部上传**非北京地区的阿里云ECS可以使用吗?不能,因为阿里云盘在使用北京地区的对象存储
-:::
-
-## 4. Other Instructions { lang="en" }
-
-## 4. 其他说明 { lang="zh-CN" }
-
-### 4.1. Permission Scope { lang="en" }
-
-### 4.1. 权限范围 { lang="zh-CN" }
+## 4. 其他说明
-::: en
-
-OpenList only obtains cloud drive user (**name, avatar ¹**), (**file access permission ²**), and (**file write permission ³**), without obtaining phone number permission.
-
-Details can be viewed in the following two ways:
-
-1. The **prompt** when scanning the code to obtain the refresh token.
-2. Open **AliYun Drive app → My → Settings gear icon in the upper right corner → Privacy Settings → Authorization Management → Click OpenList** to view.
- - You can manually revoke permissions at any time if not in use.
-
-:::
-
-::: zh-CN
+### 4.1. 权限范围
OpenList 仅获取了 云盘用户 (**名称 头像 ¹**),(**访问文件权限 ²**)和(**写入文件权限 ³**),未获取手机号权限
@@ -529,25 +227,8 @@ OpenList 仅获取了 云盘用户 (**名称 头像 ¹**),(**访问文件权
2. 打开 **阿里云盘 APP --> 我的 -->右上角设置齿轮 --> 隐私设置 --> 授权管理 --> 点击 OpenList** 进行查看
- 若不使用了可以随时手动解除权限
-:::
+### 4.2. 关于视频播放
-### 4.2. About Video Playback { lang="en" }
-
-### 4.2. 关于视频播放 { lang="zh-CN" }
-
-::: en
-
-The default player is AliYun Drive's built-in player - **Aliyun Video Previewer**.
-Videos uploaded to the cloud drive will be transcoded into H.264-encoded video streams through the transcoding service. (The benefit is that iOS can play them... Well, it should be like this.)
-
-- For newly uploaded videos, only the first 30s of the video is pre-transcoded by default. The first play will trigger full video transcoding. The transcoded video will be cached, and no retranscoding is needed for subsequent plays.
-- Videos shorter than 30s will not trigger pre-transcoding, and transcoding will only start when played for the first time.
-- Real-time transcoding takes some time.
-- Video qualities are: LD|SD|HD|FHD|QHD.
-
-:::
-
-::: zh-CN
默认使用的是阿里云盘自带播放器 - **Aliyun Video Previewer**
上传到云盘的视频,会经过转码服务转成 H.264 编码的视频流。(好处是 IOS 可以播放了...嗯 应该是这样)
@@ -557,43 +238,13 @@ Videos uploaded to the cloud drive will be transcoded into H.264-encoded video s
- 实时转码需要一定时间。
- 画质分别为:LD|SD|HD|FHD|QHD
-:::
-
-### 4.3. Inability to View Office Suite Files { lang="en" }
-
-### 4.3. Office 全家桶文件无法查看 { lang="zh-CN" }
-
-::: en
-
-> Q: Why can't Office suite files be viewed in AliYun Drive Open?
->
-> A: ~~Because AliYun Drive has not opened the relevant API, so it cannot be viewed temporarily~~ (Stay tuned.)
-
-:::
-
-::: zh-CN
+### 4.3. Office 全家桶文件无法查看
> Q:阿里云盘Open怎么看不了 Office 全家桶类型的文件
>
> A:~~因为阿里云盘未开放相关API故暂时无法查看~~(敬请期待)
-:::
-
-### 4.4. Subtitle Loading { lang="en" }
-
-### 4.4. 字幕加载 { lang="zh-CN" }
-
-::: en
-
-Q: How to load subtitles?
-
-A: AliYun Drive Open needs to use the **Aliyun Video Previewer** player, and currently only supports transcoding srt and vtt text format subtitles encapsulated in mkv.
-
-- Currently, only three languages are supported: eng, jpn, chi. Other languages will be lost.
-
-:::
-
-::: zh-CN
+### 4.4. 字幕加载
Q:如何加载字幕?
@@ -601,31 +252,7 @@ A:阿里云盘open 需要使用 **Aliyun Video Previewer**播放器,然后
- 目前只支持转码 eng、jpn、chi 三种语言,其他语言会丢失
-:::
-
-### 4.5. Common Issues { lang="en" }
-
-### 4.5. 常见问题 { lang="zh-CN" }
-
-::: en
-
-1. ExceedCapacityForbidden
-
- Q: When playing AliYun Drive videos online, it cannot play and prompts the error: **`ExceedCapacityForbidden`**.
-
- A: **The user's capacity is exceeded**, restricting playback. You need to expand the capacity or delete unnecessary files to free up space
- - In OpenList, it prompts: `ExceedCapacity Forbidden: Execeed Capactity Forbidden`.
- - In AliYun Drive, it prompts: `云盘可用空间不足` (Insufficient available space in cloud drive).
-
-2. Transcoding in progress, please try again later.
-
- Q: When viewing a video in AliYun Drive, it prompts `Transcoding in progress, please try again later`, and when mounting in OpenList, it prompts: `failed link: failed get link: UserNotAllowedAccessResource: user not allowed access resource for violation`.
-
- A: It means the account has been frozen (previously, it was directly unable to log in). For specific situations, please check the red content notes at the top.
-
-:::
-
-::: zh-CN
+### 4.5. 常见问题
1. ExceedCapacityForbidden
@@ -641,35 +268,7 @@ A:阿里云盘open 需要使用 **Aliyun Video Previewer**播放器,然后
A:代表帐号已经被冻结(以前都是直接无法登录),具体情况请查看顶部的红色内容注意事项
-:::
-
-## 5. The default download method used { lang="en" }
-
-## 5. 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+## 5. 默认使用的下载方式
```mermaid
---
@@ -689,5 +288,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/autoindex.md b/pages/guide/drivers/autoindex.md
index a27866879..1b077a32e 100644
--- a/pages/guide/drivers/autoindex.md
+++ b/pages/guide/drivers/autoindex.md
@@ -1,46 +1,17 @@
---
-title:
- en: AutoIndex
- zh-CN: AutoIndex
-icon: iconfont icon-state
top: 350
categories:
- guide
- drivers
---
-::: en
-
-The AutoIndex driver is used to mount directory index pages built into HTTP servers, such as the [Nginx Source Index](https://nginx.org/download/) and [Redis Releases](https://download.redis.io/releases/).
-
-This driver essentially scrapes page information directly and requires manually specifying XPaths, making it suitable for scraping pages that are not directory index pages as well.
-
-:::
-
-::: zh-CN
+# AutoIndex
AutoIndex 驱动用于挂载 HTTP 服务器内置的目录索引页,如[Nginx Source Index](https://nginx.org/download/)、[Redis Releases](https://download.redis.io/releases/)。
该驱动本质上是直接爬取页面信息,需要手动填写 XPath,因此也可以用来爬取那些不是目录索引页的页面。
-:::
-
-## Setup Instructions { lang="en" }
-
-## 配置说明 { lang="zh-CN" }
-
-::: en
-
-- **URL:** The website address. If no scheme is included, `https://` will be automatically added. To mount a subpath, append it directly to the end of the URL. For example, can be used to mount the subpath `tomcat/` under . Required.
-- **Entry XPath:** An XPath expression used to match each entry node in the file list. The result of this expression must be a **node-set**, where each node corresponds to a file entry. Required.
-- **Filename XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the filename. The result can be a node, node-set, or string. If the result is a node or node-set, the innerText of the first node will be used as the filename. Required.
-- **Modification time XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the file modification time. The result can be a node, node-set, or string. If the result is a node or node-set, the innerText of the first node will be used as the modification time string. Optional. If left blank, no node is matched, or the date format is unrecognizable, the current time will be used by default.
-- **File size XPath:** Within the context of each node matched by **Entry XPath**, this XPath expression is used to extract the file size. The result can be a node, node-set, number, or string. If the result is a node or node-set, the innerText of the first node will be parsed as the file size. Optional. If left blank, no node is matched, or the content cannot be recognized as a valid size, the driver will return a file size of 0.
-- **Ignore filenames:** Used to filter out entries that should not be crawled (e.g., list headers, parent directory links). Enter the filenames to ignore (without the trailing `/`).
-- **Modification date format:** Enter a time string matching the format displayed on the page (refer to the Go time template: `Mon Jan 2 15:04:05 -0700 MST 2006`, see also: [Go Time Formatting Documentation](https://golang.org/pkg/time/#pkg-constants)).
-
-:::
-::: zh-CN
+## 配置说明
- **URL:** 网站地址,如不含 scheme 会自动添加`https://`,需要挂载子路径可直接在链接结尾添加,如可用于挂载的子路径`tomcat/`,必填。
- **条目 XPath:** 用于匹配文件列表中每个条目节点的 XPath 表达式,该表达式的执行结果必须为**节点集**,其中每个节点对应一个文件条目。此项为必填。
@@ -50,33 +21,11 @@ AutoIndex 驱动用于挂载 HTTP 服务器内置的目录索引页,如[Nginx
- **忽略文件名:** 用于过滤不需要抓取的条目(例如列表表头、返回上级目录的链接等)。填写希望忽略的文件名(无需包含结尾的`/`)。
- **修改日期格式:** 填写与页面显示格式对应的时间字符串(参考 Go 时间模板:`Mon Jan 2 15:04:05 -0700 MST 2006`,另请参阅: [Go时间格式化文档](https://golang.org/pkg/time/#pkg-constants))
-:::
+## 参考配置
-## Reference Configuration { lang="en" }
-
-## 参考配置 { lang="zh-CN" }
-
-::: en
-The following configurations can be used to mount the auto-index pages of some HTTP servers. Since the style of auto-index pages may change with updates to the HTTP server version, the configurations provided below are for reference only and are not guaranteed to work across all versions. You are welcome to supplement available configurations for other HTTP servers in the comments.
-:::
-::: zh-CN
以下为挂载部分 HTTP 服务器 auto-index 页的可用配置。由于 auto-index 页的样式可能随 HTTP 服务器的版本更新而发生改变,以下配置仅供参考,不保证在所有版本中都可以使用。欢迎在评论中补充其它 HTTP 服务器的可用配置。
-:::
-
-#### Nginx (Tested on 1.29.0) { lang="en" }
-#### Nginx(测试版本 1.29.0) { lang="zh-CN" }
-
-::: en
-
-- Entry XPath: `//pre/a`
-- Filename XPath: `.`
-- Modification time XPath: `substring(normalize-space(./following-sibling::text()[1]),1,17)`
-- File size XPath: `substring(normalize-space(./following-sibling::text()[1]),19)`
-- Modification date format: `02-Jan-2006 15:04`
-
-:::
-::: zh-CN
+#### Nginx(测试版本 1.29.0)
- 条目 XPath:`//pre/a`
- 文件名 XPath:`.`
@@ -84,22 +33,7 @@ The following configurations can be used to mount the auto-index pages of some H
- 文件大小 XPath:`substring(normalize-space(./following-sibling::text()[1]),19)`
- 修改时间格式:`02-Jan-2006 15:04`
-:::
-
-#### Apache httpd (Tested on 2.4.18) { lang="en" }
-
-#### Apache httpd(测试版本 2.4.18) { lang="zh-CN" }
-
-::: en
-
-- Entry XPath: `//table/tbody/tr[position() > 2]`
-- Filename XPath: `./td[2]/a`
-- Modification time XPath: `./td[3]`
-- File size XPath: `./td[4]`
-- Modification date format: `2006-01-02 15:04`
-
-:::
-::: zh-CN
+#### Apache httpd(测试版本 2.4.18)
- 条目 XPath:`//table/tbody/tr[position() > 2]`
- 文件名 XPath:`./td[2]/a`
@@ -107,22 +41,7 @@ The following configurations can be used to mount the auto-index pages of some H
- 文件大小 XPath:`./td[4]`
- 修改时间格式:`2006-01-02 15:04`
-:::
-
-#### Caddy (Tested on v2.10.2) { lang="en" }
-
-#### Caddy(测试版本 v2.10.2) { lang="zh-CN" }
-
-::: en
-
-- Entry XPath: `//table/tbody/tr`
-- Filename XPath: `./td[2]/a/span`
-- Modification time XPath: `./td[4]/time`
-- File size XPath: `./td[3]/div/div[2]`
-- Modification date format: `01/02/2006 03:04:05 PM -07:00`
-
-:::
-::: zh-CN
+#### Caddy(测试版本 v2.10.2)
- 条目 XPath:`//table/tbody/tr`
- 文件名 XPath:`./td[2]/a/span`
@@ -130,22 +49,7 @@ The following configurations can be used to mount the auto-index pages of some H
- 文件大小 XPath:`./td[3]/div/div[2]`
- 修改时间格式:`01/02/2006 03:04:05 PM -07:00`
-:::
-
-#### Python SimpleHTTP (Tested on 3.11.5-0.6) { lang="en" }
-
-#### Python SimpleHTTP(测试版本 3.11.5-0.6) { lang="zh-CN" }
-
-::: en
-
-- Entry XPath: `//ul/li`
-- Filename XPath: `./a`
-- Modification time XPath: leave blank
-- File size XPath: leave blank
-- Modification date format: leave blank
-
-:::
-::: zh-CN
+#### Python SimpleHTTP(测试版本 3.11.5-0.6)
- 条目 XPath:`//ul/li`
- 文件名 XPath:`./a`
@@ -153,35 +57,7 @@ The following configurations can be used to mount the auto-index pages of some H
- 文件大小 XPath:留空
- 修改时间格式:留空
-:::
-
-## The default download method used { lang="en" }
-
-## 默认使用的下载方式 { lang="zh-CN" }
-
-::: en
-
-```mermaid
----
-title: Which download method is used by default?
----
-flowchart TB
- style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
- style a2 fill:#ff7575,stroke:#333,stroke-width:4px
- subgraph ide1 [ ]
- a1
- end
- a1[302]:::someclass====|default|a2[user equipment]
- classDef someclass fill:#f96
- c1[local proxy]-.alternative.->a2[user equipment]
- b1[Download proxy URL]-.alternative.->a2[user equipment]
- click a1 "../drivers/common.html#webdav-policy"
- click b1 "../drivers/common.html#webdav-policy"
- click c1 "../drivers/common.html#webdav-policy"
-```
-
-:::
-::: zh-CN
+## 默认使用的下载方式
```mermaid
---
@@ -201,5 +77,3 @@ flowchart TB
click b1 "../drivers/common.html#webdav-策略"
click c1 "../drivers/common.html#webdav-策略"
```
-
-:::
diff --git a/pages/guide/drivers/baidu.md b/pages/guide/drivers/baidu.md
index 3adf31c0d..a27ef363d 100644
--- a/pages/guide/drivers/baidu.md
+++ b/pages/guide/drivers/baidu.md
@@ -1,38 +1,12 @@
---
-title:
- en: Baidu Netdisk
- zh-CN: 百度网盘
-icon: iconfont icon-state
-# This control sidebar order
top: 690
-# A page can have multiple categories
categories:
- guide
- drivers
-# A page can have multiple tags
-tag:
- - Storage
- - Guide
- - '302'
- - '官方'
-# this page is sticky in article list
-sticky: true
-# this page will appear in starred articles
-star: true
---
-::: en
-::: tip
-Due to the limitation of Baidu Disk API, downloading files larger than about 20M needs to carry the header: "User-Agent": "pan.baidu.com", so when downloading files larger than 20M, you need to set the request header yourself, such as using curl:
-
-```bash
-curl -L -X GET 'YOUR_LINK' -H 'User-Agent: pan.baidu.com'
-```
+# 百度网盘
-Or use the proxy function in this program to transfer.
-:::
-
-::: zh-CN
::: tip
由于百度网盘 API 的限制,下载大于 20M 左右的文件需要携带 header:"User-Agent":"pan.baidu.com",所以下载大于 20M 的文件时,需要设置请求头,例如使用 curl:
@@ -43,44 +17,6 @@ curl -L -X GET 'YOUR_LINK' -H 'User-Agent:pan.baidu.com'
或者使用本程序中的代理功能进行传输。
:::
-::: en
-
-```mermaid
----
-title: How to Stream from Baidu Cloud?
----
-flowchart TB
- a[(Baidu Cloud)]
- 1[Official API]
- b[Super VIP]
- c[Modify UA]
- d[Can Modify UA]
- e[Cannot Modify UA]
- f[Local Proxy]
- g[High Bandwidth]
- k[Low Bandwidth, Cannot Handle]
- l[Can Stream]
- m[End]
-
- a ==> 1
- 1 ==> b
- b ==> c
- b -.-> m
- c ==> d
- c -.-> e
- d ==> l
- e ==> f
- f ==> g
- f -.-> k
- g ==> l
- k ==> m
- click c,e,d,m "#Add-User-Agent-Example"
-```
-
-:::
-
-::: zh-CN
-
```mermaid
---
title: 百度云盘如何在线播放?
@@ -113,89 +49,8 @@ flowchart TB
click c,e,d,m "#添加-user-agent-使用示例"
```
-:::
-
-## Refresh token { lang="en" }
-
-## 刷新令牌 { lang="zh-CN" }
-
-::: en
-**Currently, there are three methods to obtain a Baidu Netdisk refresh token:**
-
-All methods require you to [click here](https://api.oplist.org/) to obtain the refresh token. The **first method** requires developer permissions, while the **latter two** do not.
-
-1. If you have Baidu Netdisk developer permissions, please select **"Baidu Netdisk Auth Login"**, and in the Baidu Netdisk developer app backend, set the callback URL to the one provided on the webpage. After clicking "Get Token," you will automatically receive a refresh token. You can then configure your own `client_id` and `client_secret` in OpenList.
-
- (Please note: If using Baidu Netdisk's API, ensure the “Use Online API” option is unchecked, otherwise it will prevent connection.)
-
- 
-
- Want to obtain developer permissions? Please follow the steps below to apply for developer permissions on Baidu Cloud Open Platform:
-
- (Please note that we do not advocate the abuse of Baidu Netdisk developer permissions. You need to bear the operational risks yourself.)
- 1. Please go to [Baidu Open Platform](https://pan.baidu.com/union).
-
- 
-
- 2. Log in to your Baidu account.
-
- {width=200px}
-
- 3. Follow the steps to complete the developer certification (supplement account information, such as real-name authentication, email, etc.).
-
- 4. After completion, the system will automatically redirect to the [Baidu Open Platform Console](https://pan.baidu.com/union/console/applist).
-
- If you cannot access the console, you may not have completed the certification. Please return to step one and try again.
-
- {width=600px}
-
- 5. Create an application using the create button in the console.
-
- (Please note that individual developers can only create one application. If you have other uses for the application, please use methods two and three. Here we assume you don't have an application and are willing to create one for OpenList.)
-
- {width=600px}
-
- 6. Select "Software" as the application category, and fill in the application name and description according to your preference. Please note that these three contents cannot be changed once set, so please think carefully before filling them out.
-
- {width=600px}
-
- 7. After creation is complete, you'll return to the control panel. Click on the application name to enter the application details page.
-
- (Please note that you don't need to apply for online review to use it normally.)
-
- {width=200px}
-
- 8. Select Security Settings and fill in the application callback URL with the provided callback address and save.
-
- {width=600px}
-
- ```
- https://api.oplist.org/baiduyun/callback
- ```
-
- {width=600px}
-
- 9. Return to the application details page and copy the necessary AppKey and SecretKey.
-
- 10. Use the [OpenList Token Acquisition Tool](https://api.oplist.org/) to log in via Baidu Netdisk authentication and fill in the corresponding keys to obtain the token.
-
- 11. Fill in the corresponding parameters and settings according to the image at the beginning of this method to start using it.
-
-2. This method uses a built-in API call via our intermediary server to refresh the access token. It is already available online. Simply check the option to use the parameters provided by OpenList, click "Get Token," and you will receive a refresh token. In the storage configuration page of OpenList, enable the "Use Online API" option, and enter the refresh token to start using it.
-
- 
-
- The basic principle of the online API is illustrated in the diagram below:
-
- 
-
-3. If you do not have Baidu Netdisk developer permissions but somehow have access to an app’s `client_id` and `client_secret`, please select **"Baidu Netdisk OOB Authentication"**. By default, this method uses the client parameters from the "ES File Explorer" app, but you can also input your own `client_id` and `client_secret`. After clicking "Get Token," wait patiently as you are redirected to the Baidu authorization page. Log in and authorize the app, then copy the authorization code and return to the original webpage to input the code as instructed to obtain the refresh token. In the storage configuration page of OpenList, fill in the `client_id` and `client_secret` to start using the service.
+## 刷新令牌
- 
-
-:::
-
-::: zh-CN
**目前你有三种方法获取百度网盘的刷新令牌:**
全部都要[点击这里](https://api.oplist.org/) 来获取刷新令牌。第一种需要开发者权限,后**两种**不需要。
@@ -269,74 +124,18 @@ All methods require you to [click here](https://api.oplist.org/) to obtain the r

-:::
-
-## Root folder path { lang="en" }
-
-## 根文件夹ID { lang="zh-CN" }
+## 根文件夹ID
-::: en
-The root foler to mount, defaults to `/`
-
-- Mount a folder separately, according to the following format, `/` is the root directory, just extend to that directory if you want to mount that directory
- - /folder_A/....../folder_x
-
-:::
-
-::: zh-CN
要挂载的根文件夹,默认为`/`
- 单独挂载某文件夹,按照下面格式,`/`是根目录,想挂载那个目录就延伸到那个目录就可以
- /文件夹-A/……/文件夹-x
-:::
-
-## ~~**Custom crack ua**~~ { lang="en" }
+## ~~**自定义破解ua**~~
-## ~~**自定义破解ua**~~ { lang="zh-CN" }
-
-::: en
-~~[**UA used when using 【Native Proxy & Crack API】**](https://github.com/alist-org/alist/issues/5602#issuecomment-1831188682)~~ The unofficial interface is no longer available
-
-:::
-::: zh-CN
~~[**使用【本地代理 & Crack API】时候使用的UA**](https://github.com/alist-org/alist/issues/5602#issuecomment-1831188682)~~ 非官方接口已无法使用
-:::
-
-## Download api { lang="en" }
-
-## 下载接口 { lang="zh-CN" }
-
-::: en
-
-- **Official:** The official interface, very stable, but for larger files, UA needs to be modified and the speed is slow (SVIP speed fast)
-- **Crack:** unofficial interface,**Seems to be no longer available** ~~You must modify the UA and some files may not have a speed limit, but it will be unstable (not guaranteed 100%availability) Need to use a version greater than `3.19.0`~~
- - ~~Need to change the UA to`netdisk`,Modification method refer to [add-user-agent-user-example](#add-user-agent-usage-example)~~
- - ~~Or turn on the Web proxy, you do not need to modify the UA (you need a large broadband to use it stably)~~
- - ~~It is limited to play/download **`video (only tested in the mp4 format other formats are not tested)`**,If it is other format files, such a prompt will appear~~
- - ~~This is not a mistake, this is a limit, please do not panic.~~
-- **Crack video:** unofficial video interface, dedicated to playing videos, the following errors will occur in non-video formats, which is normal
- - The browser also needs to modify the UA: `pan.baidu.com` or `netdisk` In short, if it is not the browser User-Agent, the video can be played.
- - The specific situation is the same as the previous unofficial interface usage
- - The continuous use time is unknown, and 100% availability is not guaranteed
-
- ```json{2-4,7-9}
- {
- error_code: 31119,
- error_msg: "hit black userlist , hit illeage dlna",
- request_id: 541111111111111140
- },
- {
- error_code: 31329,
- error_msg: "hit black userlist , hit illeage dlna",
- request_id: 921111381111111100
- }
- ```
-
-:::
-
-::: zh-CN
+## 下载接口
- **Official**:官方接口,很稳定,但是文件比较大,需要修改UA,速度慢 (SVIP速度快)
- **Crack**:非官方接口,**似乎已经无法使用了**~~现在也需要修改UA且部分文件可能不限速,但是会不稳定(不保证100%可用性)需要使用大于`3.19.0`的版本~~
@@ -363,24 +162,8 @@ The root foler to mount, defaults to `/`
}
```
-:::
-
-## Add "User-Agent" usage example { lang="en" }
-
-### 添加 "User-Agent" 使用示例 { lang="zh-CN" }
-
-::: en
-::: danger If you don't know how to set "User-Agent" see here
-The following methods are limited to Baidu super member users
+### 添加 "User-Agent" 使用示例
-Prompt again The following methods are limited to Baidu super member users
-
-It will only be useful if a member finishes modifying **`"User-Agent"`** (choose official and 302)
-
-If you don’t change **`"User-Agent"`**, you can enable=Web Agent, the disadvantage is that you need to build an OpenList machine for transfer, that is to say, you need a large broadband to help you transfer
-:::
-
-::: zh-CN
::: danger 如果你不会设置 "User-Agent" 请看这里
以下方法仅限于有百度超级会员用户使用
@@ -391,32 +174,6 @@ If you don’t change **`"User-Agent"`**, you can enable=Web Agent, the disadvan
如果不改 **`"User-Agent"`**,可以开启 Web代理,缺点是需要你搭建OpenList的机器中转,也就是说你需要大宽带帮你中转
:::
-::: en
-
-
-
- Tutorial on how to modify UA in web page 302 mode
-
-
-
-
Official
-
-
-
-
Crack video (unavailable)
-
-
-
-
-
-:::
-
-::: zh-CN
-
网页302模式修改UA教程
@@ -437,23 +194,7 @@ If you don’t change **`"User-Agent"`**, you can enable=Web Agent, the disadvan