diff --git a/docker-compose.yml b/docker-compose.yml index 4fbfd31..4f4828f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,41 +25,12 @@ services: ports: - "5888:5888" environment: - # Polling intervals in seconds. Set to 0 to disable (a manual scan is - # still available from the admin API). - SCAN_INTERVAL: "1800" - WATCH_INTERVAL: "60" + # Business settings are managed in the administrator UI and persisted in /data. LOG_LEVEL: "info" - # Optional online media metadata providers. Configure on the host; do not - # commit credentials. Local NFO/tags work without either provider. - # MEDIA_TMDB_TOKEN: "${MEDIA_TMDB_TOKEN}" - # MEDIA_TMDB_API_KEY: "${MEDIA_TMDB_API_KEY}" - # MEDIA_MUSICBRAINZ_USER_AGENT: "Reader/1.0 (your-contact@example.com)" - # Set this to the address you actually reach the server on, so download - # links work behind a reverse proxy. - # PUBLIC_URL: "https://reader.example.com" - # Uncomment to allow family members to self-register instead of the admin - # creating their accounts: - # ALLOW_REGISTRATION: "true" - # Origins allowed to call the API from a browser, comma separated. - # Empty (the default) reflects whatever origin asks. Fine for a LAN: the - # client does not know the address it will be reached on, and there are no - # cookies in the design. Set it if the instance is on the public internet: - # CORS_ORIGINS: "https://reader.example.com" # Directory holding the built H5 client, served at `/`. Already set in the # image; only override if you build the client separately. # WEB_DIR: "/app/web" - # --- HTTP speech, for clients that have no engine of their own --- - # The server only *proxies*; it does not bundle a synthesizer, because - # that would multiply the image size and a NAS's CPU budget. Point this at - # any service that accepts the classic `?text=...&speed=...` shape - # (edge-tts, a local Piper wrapper, a commercial API with a shim). - # - # TTS_URL: "http://host.docker.internal:5002/tts" - # TTS_TOKEN: "" # bearer token, if the upstream wants one - # TTS_VOICES_URL: "" # defaults to /voices - # TTS_CACHE_BYTES: "268435456" # audio cache cap in /data; 0 disables volumes: # --- your books --- # Use :ro for a browse-only deployment. Use :rw if an administrator diff --git a/docs/README.md b/docs/README.md index 407d2dd..a82f954 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,7 @@ The project README introduces reader. Use the guides below for installation, eve | 远端媒体目录 / Remote media directories | [OpenList 接入](media-openlist.md) | Chinese only | | 安装到桌面、离线启动和版本更新 / PWA installation, offline startup and updates | [PWA 指南](pwa.zh-CN.md) | Chinese only | | 环境变量、目录权限、HTTPS、排错 / Settings, permissions, HTTPS, troubleshooting | [部署配置](configuration.zh-CN.md) | [Configuration](configuration.en.md) | +| 页面业务配置、服务连接与迁移 / Business settings, service connections and migration | [业务配置](business-settings.zh-CN.md) | Chinese only | | 数据备份、校验与恢复 / Data backup, verification and restore | [备份恢复](backup.zh-CN.md) | Chinese only | | 本地开发、验证、镜像与 Android 构建 / Development, checks, Docker and Android builds | [开发指南](development.zh-CN.md) | [Development](development.en.md) | diff --git a/docs/api.md b/docs/api.md index a347e13..3f56b46 100644 --- a/docs/api.md +++ b/docs/api.md @@ -72,7 +72,7 @@ ``` - 首个账号恒可注册,且自动成为 `admin` -- 之后按管理员设置的注册策略开放;未设置时兼容 `ALLOW_REGISTRATION`。 +- 之后按管理员设置的注册策略开放;首次初始化时从旧 `ALLOW_REGISTRATION` 导入,随后以数据库配置为准。 - 邀请模式需要提交 `inviteCode`,无效、过期、停用或用尽的邀请码返回 `400 INVITE_INVALID`,未填写返回 `400 INVITE_REQUIRED`。普通注册只创建普通用户。 - 关闭时返回 `400 REGISTRATION_DISABLED` @@ -634,7 +634,7 @@ manifest 的每个条目还带 `ref`,即这个文件对应的**资源引用** ## 朗读(HTTP TTS) -这两条路由只在服务端配置了 `TTS_URL` 时才有意义,并且分工明确: +这两条路由只在服务端配置了 HTTP 朗读合成接口 时才有意义,并且分工明确: 一条回答「这里能用什么」,一条真正合成音频。 ### `GET /tts/voices` @@ -643,10 +643,10 @@ manifest 的每个条目还带 `ref`,即这个文件对应的**资源引用** → `{ "http": false, "formats": ["audio/mpeg", ...], "maxLength": 800, "voices": [] }` -- 未配置 `TTS_URL` 时返回 `http: false` 而**不是 404**:客户端问的是「这里能用什么引擎」, - 不是「这个接口存在吗」。一个 `TTS_URL` 没配的实例是完全正常的实例。 +- 未配置 HTTP 朗读合成接口 时返回 `http: false` 而**不是 404**:客户端问的是「这里能用什么引擎」, + 不是「这个接口存在吗」。一个 HTTP 朗读合成接口 没配的实例是完全正常的实例。 - `maxLength` 无论开关都返回:客户端会按它切句,这个决定发生在选引擎之前。 -- 配置了之后 `voices` 来自 `TTS_VOICES_URL`(或约定路径 `/voices`)。 +- 配置了之后 `voices` 来自 音色列表接口(或约定路径 `<合成接口>/voices`)。 ### `GET /tts?text=<文本>&voice=<可选>&speed=<可选>&format=<可选>` @@ -658,23 +658,22 @@ manifest 的每个条目还带 `ref`,即这个文件对应的**资源引用** - `speed` 夹在 0.25–4;`text` 上限 800 字,超了返回 `TEXT_TOO_LONG`, **不会转发给上游**。 - 上游返回非 `audio/*` 时返回 `TTS_UPSTREAM` 而不是把 HTML 当音频流出去: - 一个配错的 `TTS_URL`(指到一个网页)会以 200 返回 HTML,塞进 `