跳到正文Skip to content

HTTP 配置、环境与资源端点

当第三方客户端或 Web 前端需要读取参数结构与可选值、保存 API 密钥、上传字体和提示词,或应用管理员预设时,这里说明这些 HTTP 端点的路径、鉴权边界、请求/响应契约和底层行为。这里仅记录开发者 HTTP API;Web 用户端的配置页签与上传操作见上传、配置与翻译资源、字体与提示词,管理员界面操作见管理员界面,会话与状态码契约见HTTP API 鉴权与错误

接口范围

  • 内容包括四组端点:配置元数据(/config*/fonts/translators/languages/workflows/translator-config/{translator}/user/settings/user/access/api-key-policy/i18n/*/announcement/api)、环境变量(GET|POST /envGET /env/effective)、用户资源(/api/resources/*)和配置管理(/api/admin/config/*/api/admin/presets*/api/presets*/api/config/user*)。
  • 这里不覆盖翻译、流式、批量、历史、日志、用户/用户组/配额/审计端点;它们分别见翻译端点流协议历史文件与下载票据管理端点
  • GET /envGET /env/effective 永不返回服务器 API Key 明文;管理员也只能在 GET /api/admin/config/server?show_values=true 下看到明文,且该端点要求管理员会话。
  • 这里不记录真实 API Key、Token、用户名、私有绝对路径、用户提示词正文或字体文件;默认值与白名单来自源码常量,不代表运行部署的实际配置。

配置元数据端点

配置结构

端点鉴权边界静态行为
GET /config/defaults无 token 依赖返回服务器默认配置模板:过滤 SERVER_HIDDEN_CONFIG_KEYS、剔除 Qt UI 专属 app 段,并追加 quotapermissions 默认值
GET /configmode=user 无 token;mode=authenticatedX-Session-Tokenmode=admin 返回过滤隐藏键后的全量按模式返回用户可见配置;authenticated 模式还叠加用户/用户组参数权限并附加 user_permissions
GET /config/options可选 X-Session-Token返回参数下拉选项;带 token 时追加用户上传的字体与提示词,并按权限过滤翻译器/OCR/上色/渲染选项
  • GET /configmode=user(legacy)按 admin_settingsvisible_sectionshidden_keysdefault_values 过滤;mode=authenticated 校验令牌后按用户权限与用户组隐藏参数/默认值过滤,并在响应中加入 user_permissionsmode=authenticated 缺少或令牌无效时返回 {"error": {"code": "NO_TOKEN" | "INVALID_TOKEN", ...}}
  • GET /config/defaults 追加的 quota 默认值为 daily_image_limit: 100daily_char_limit: 100000max_concurrent_tasks: 3max_batch_size: 20max_image_size_mb: 10max_images_per_batch: 50permissions 默认除 can_view_logsshow_env_editorrequire_user_keyssave_user_keys_to_serverfalse 外其余为 true

选项与元数据

端点鉴权边界返回内容
GET /fonts共享字体目录下 .ttf/.otf/.ttc 文件名(服务器字体)
GET /translatorsmode 参数翻译器列表(排除隐藏项);authenticated 模式按用户权限过滤
GET /languagesmode 参数VALID_LANGUAGES;authenticated 模式当前返回全部(语言级权限预留)
GET /workflowsmode 参数七种工作流;authenticated 模式按用户与用户组的允许/拒绝列表过滤
GET /translator-config/{translator}config/translators.json 存在,仅返回 namedisplay_namerequired_env_varsoptional_env_vars 公开信息
  • GET /config/options 返回的键包括 rendereralignmentdirectionupscalerdetectorcolorizerinpainterinpainting_precisionocrsecondary_ocrtranslatortarget_langkeep_langupscale_ratiorealcugan_modelfont_familyhigh_quality_prompt_pathlayout_modeocr_vl_language_hintformatimage_extensionsfont_family 合并服务器字体与当前会话用户的字体,high_quality_prompt_path 合并 dict/ 下的提示词文件与用户上传的提示词。

用户设置与访问

端点鉴权边界返回内容
GET /user/settings可选 X-Session-Tokenshow_env_editorcan_upload_fontscan_upload_promptsallow_server_keysmax_image_size_mbmax_images_per_batch;登录用户叠加用户组配额与权限
GET /user/access{"require_password": bool},旧式单密码门
GET /api-key-policy可选 X-Session-Token全局策略叠加用户组覆盖后的有效 API Key 策略,并附 merge_orderfallback_rule
  • Web 前端用 /user/settings 决定是否显示“API密钥”页签与字体/提示词上传区域;区域隐藏只是前端行为,最终权限由服务端校验。

i18n、公告与服务器信息

端点鉴权边界返回内容
GET /i18n/languages桌面 locales 目录中的 {locale_code: locale_code} 映射
GET /i18n/{locale}对应 locale 的桌面翻译 JSON;realpath 校验防路径穿越,缺失返回 {}
GET /announcement管理员公告;未启用返回 {"enabled": false},启用时含 messagetype
GET /api服务器信息:messageversion: "2.0"endpoints

环境变量端点

读取

  • GET /envrequire_auth):无论 show_env_editor 是否为真都返回 {},不暴露服务器 API Key 明文。
  • GET /env/effectiverequire_auth):返回 API Key 来源元数据而非值。响应包含 policyselected_preset_idselected_preset_nameselected_preset_sourceeffective_keyssourcesserver_env_varspreset_env_varsmerged_env_vars 恒为空对象。sourcesserver / preset 标记每个键的来源,preset 覆盖 server。
  • show_env_editor 为假时 GET /env/effective 仍返回同形状的元数据,只是 sources 为空。

保存

  • POST /envrequire_auth):请求体为 {"OPENAI_API_KEY": "...", ...} 这类键值对象。服务端只保留 WEB_API_ENV_KEYS 白名单中的键(OpenAI/Gemini/Sakura 的翻译、OCR、上色、渲染分组);show_env_editor 为假时返回 403
  • save_user_keys_to_serverfalse(默认)时不写服务器,返回 {"success": true, "saved_to_server": false};前端把键保存在浏览器 localStorage.user_env_vars 并随翻译请求发送,只对本次使用有效。
  • save_user_keys_to_servertrue 时,EnvService.update_env_var 逐项写入应用目录 .env,随后 load_app_dotenv(..., override=True) 重载;失败返回 500
  • 空值(null 统一转为 "")用于清除已保存的键;非白名单键会被丢弃。

用户资源端点

提示词

端点鉴权边界行为
POST /api/resources/promptsrequire_auth + 上传提示词权限multipart 上传;支持 .txt/.json;权限不足 403,格式错误 400
GET /api/resources/promptsrequire_auth当前用户提示词列表与 count
DELETE /api/resources/prompts/{resource_id}require_auth + 删除权限删除单个提示词
DELETE /api/resources/prompts/by-name/{filename}require_auth + 删除权限按文件名删除

字体

端点鉴权边界行为
POST /api/resources/fontsrequire_auth + 上传字体权限multipart 上传;支持 .ttf/.otf/.ttc,尝试提取字体族名
GET /api/resources/fontsrequire_auth当前用户字体列表
DELETE /api/resources/fonts/{resource_id}require_auth + 删除权限删除单个字体
DELETE /api/resources/fonts/by-name/{filename}require_auth + 删除权限按文件名删除

统计

  • GET /api/resources/statsrequire_auth):返回 stats,即当前用户的资源统计。
  • 文件存储于 manga_translator/server/data/user_resources/prompts/{用户名}/{文件名}.../fonts/{用户名}/{文件名};文件名经过消毒(防路径遍历),重名自动追加数字后缀。

配置管理端点

服务器 .env 与备份

端点鉴权边界行为
GET /api/admin/config/server?show_values=falserequire_admin服务器 .env 配置;默认掩码敏感值(长度 ≤4 全 *,否则保留前后 2 字符);show_values=true 返回明文
PUT /api/admin/config/serverrequire_adminbody {"config": {"KEY": "value"}} 更新 .envcreate_backup=true(默认)先备份
GET /api/admin/config/backupsrequire_admin列出 .env.backup.* 备份(pathfilenamecreated_atsize
POST /api/admin/config/restorerequire_adminbody {"backup_path": "..."} 从备份恢复;路径必须位于备份目录且以 .env.backup. 开头,否则失败
  • 每次更新前自动备份并保留最近 10 份;恢复前也会先备份当前状态。
  • 预设与用户配置中的敏感值(键含 API_KEYSECRETPASSWORDTOKEN)使用 Fernet 加密(密钥由机器信息派生),分别持久化在 env_presets.jsonuser_configs.json

预设

端点鉴权边界行为
POST /api/admin/presetsrequire_admin创建预设;同名返回 409;config 中敏感值加密存储
GET /api/presetsrequire_auth当前用户组可见的预设(不含 config 细节)
GET /api/admin/presets?include_config=falserequire_admin全部预设
GET /api/admin/presets/{preset_id}require_admin单个预设;decrypt=true 时解密
PUT /api/admin/presets/{preset_id}require_admin更新预设
DELETE /api/admin/presets/{preset_id}require_admin删除预设
POST /api/presets/{preset_id}/applyrequire_auth把预设应用到当前用户:写入 selected_preset_idconfig_mode='server';返回非大写键的 config 供 UI 应用
DELETE /api/config/user/presetrequire_auth清除当前用户选中的预设
  • 预设可见性由 visible_to_groups 控制,空列表表示所有用户组可见。

用户配置

  • GET /api/config/userrequire_auth):返回当前用户配置,API Keys 掩码;无记录时返回默认结构(api_keys: {}selected_preset_id: nullcustom_settings: {}config_mode: "server")。
  • PUT /api/config/userrequire_auth):body 为 api_keysselected_preset_idcustom_settingsconfig_mode 的任意组合;api_keys 敏感值加密后存储。
  • config_modeservercustom;应用预设只写入 selected_preset_idconfig_mode,不会把预设密钥明文复制进用户配置。

API Key 策略与合并

策略键来自 admin_settings.api_key_policy(含 show_env_to_users)与用户组 parameter_config.permissions 覆盖:require_user_keysallow_server_keyssave_user_keys_to_servershow_env_editor。默认值中除 allow_server_keystrue 外其余为 false/api-key-policy 返回的 merge_order 固定为 ["user_input", "selected_preset", "server_default"]fallback_rulefeature_specific_then_provider_default

翻译请求构建时 apply_user_env_vars 按以下顺序合并:

  1. 解析请求中的 user_env_vars(只保留非空且大写的键)。
  2. 读取当前用户生效预设的 env_vars:来源为 user_selected(用户显式选择)或 group_default(用户组默认预设)。
  3. 合并时以预设为底、用户直传覆盖;_apply_env_vars_to_configOPENAI_*/GEMINI_* 映射到 config.translator.user_api_key / user_api_base / user_api_modelapply_runtime_api_overrides 处理 OCR、上色、渲染与 Sakura 地址。
  4. 用户与预设都没有键时:require_user_keys 为真返回 403allow_server_keys 为假返回 403;否则回退到服务器默认 API Key。
flowchart LR
    subgraph KS["密钥来源"]
        U["请求 user_env_vars / localStorage.user_env_vars"]
        P["生效预设 env_vars(user_selected / group_default)"]
        S["服务器 .env 中的 WEB_API_ENV_KEYS"]
    end
    U --> M{"合并:预设为底,user 覆盖"}
    P --> M
    S --> E["GET /env/effective 只返回来源元数据,值不下发"]
    M --> C["config.translator.user_api_key/base/model"]
    M --> O["runtime_api_overrides(OCR/上色/渲染/Sakura)"]
    C --> T["实际翻译请求"]
    O --> T
    M -.->|"无用户键"| Q{"require_user_keys 或 allow_server_keys 策略"}
    Q -->|"阻止"| F["403 拒绝翻译"]
    Q -->|"放行"| D["服务器默认 API Key"]
    D --> T

上图描述的是 API Key 来源与合并路径;POST /env 是否落盘由 save_user_keys_to_server 决定,不改变合并顺序本身。

接口约束

  • Web 前端先用 /user/settings 决定“API密钥”页签与上传区域的显示,但隐藏只是前端行为,最终由服务端权限校验。
  • /config/optionsfont_familyhigh_quality_prompt_path 合并服务器与用户资源;删除用户字体/提示词后,前端需重新请求 /config/options 刷新选项。
  • 环境变量默认不落盘(save_user_keys_to_server=false);多用户部署建议关闭落盘,避免用户互相覆盖服务器密钥。
  • GET /envGET /env/effective 不返回服务器密钥明文;GET /api/admin/config/server?show_values=true 返回明文,只能用于可信管理会话。
  • 预设与用户配置中的敏感键加密存储,应用预设不会把密钥明文复制到用户配置。
  • 端点边界:翻译/流式/批量见翻译端点流协议,历史与下载见历史文件与下载票据,用户/用户组/配额/审计见管理端点,会话与状态码见鉴权与错误
  • 429 并发与每日配额由翻译路由层处理(见鉴权与错误),不属于本页端点。

开发指南

选项中英对照

UI 文案三列

以下为 Web 前端调用本页端点时使用的界面文案。index.html 的部分静态文字是硬编码中文(如“导出配置”“导入配置”“API密钥”“上传字体文件”“上传提示词文件”“字体管理”“提示词管理”“日志输出”),script.js 启动后以 locale key 覆盖一部分。

UI 调用 keyEnglish 实际值简体中文实际值
API Keys (.env)API Keys (.env)API密钥 (.env)
Basic SettingsBasic Settings基础设置
Advanced SettingsAdvanced Settings高级设置
OptionsOptions选项
Export Config / Import ConfigExport Config / Import Config导出配置 / 导入配置
env_hintAPI key input fields will appear below based on the selected translator根据选择的翻译器,下方会显示所需的 API 密钥输入框
error_loading_translator_configFailed to load translator configuration加载翻译器配置失败
label_OPENAI_API_KEYOpenAI API KeyOpenAI API 密钥
label_OPENAI_API_BASEOpenAI API BaseOpenAI API 地址
label_OPENAI_MODELOpenAI ModelOpenAI 模型
label_GEMINI_API_KEYGemini API KeyGemini API 密钥
label_SAKURA_API_BASESAKURA API BaseSAKURA API 地址
label_OCR_OPENAI_MODELOCR OpenAI Model文字识别 OpenAI 模型
label_COLOR_GEMINI_MODELColorization Gemini Model上色 Gemini 模型
label_RENDER_OPENAI_MODELRendering OpenAI Model渲染 OpenAI 模型
font_uploadedFont uploaded successfully字体上传成功
prompt_uploadedPrompt uploaded successfully提示词上传成功
web_server_configServer Configuration服务器配置
web_use_server_configUse Server Config使用服务器配置
web_user_configUser Configuration用户配置
web_visible_toVisible To可见范围
web_presetsPresets配置预设

以下 key 在 en_US.jsonzh_CN.json 中均缺失,script.js 以调用处 fallback 显示:preset_selectpreset_hintpreset_emptypreset_nonepreset_applyingpreset_appliedpreset_apply_failedlogin_required_for_api_keysapi_keys_saved_to_serverapi_keys_saved_sessionapi_keys_save_failedfont_deletedprompt_deleted。英文界面在缺失时会显示调用处的中文 fallback 文案。

文件/路径本页实际作用手改与兼容注意
manga_translator/server/data/user_resources/prompts/fonts/用户提示词与字体的存储与索引文件名消毒、重名去重;不展示真实用户文件
manga_translator/server/data/env_presets.json预设持久化,敏感值加密不展示真实预设内容
manga_translator/server/data/user_configs.json用户配置持久化,API Keys 加密不展示真实密钥
manga_translator/server/data/backups/.env.backup.* 备份(保留 10 份)恢复端点校验路径边界
manga_translator/server/data/admin_config.json管理员设置:api_key_policyshow_env_to_usersupload_limitsannouncement不展示真实配置
应用目录 .env服务器 API Key 持久化POST /env(落盘模式)与管理员更新写入;GET /env 不回显明文
config/config.json(缺失时由 config-example.json 复制)/config/defaults/config 的默认来源只记录脱敏示例
config/translators.json(若存在)/translator-config/{translator} 的公开元数据仓库未跟踪该文件时端点返回 {}
desktop_qt_ui/locales/*.json/i18n/{locale} 与条件挂载的 /locales/*realpath 防路径穿越;缺失 locale 返回 {}
manga_translator/server/static/index.htmlscript.jsjs/shared/api-key-schema.js前端驱动配置/环境/资源端点部分静态文字为硬编码中文

Mermaid 数据流限制

上图描述的是 API Key 来源、合并与运行时覆盖路径;它不代表每次翻译都经过预设或用户密钥,也不代表 /env/effective 在每次运行都会返回同样的来源组合。require_user_keysallow_server_keyssave_user_keys_to_server 等策略值来自配置而非代码常量。具体表现还会受部署配置影响。

代码位置

层级文件本页核对内容
配置路由manga_translator/server/routes/config.py/config/defaults/config/config/options/fonts/translators/languages/workflows/translator-config/{translator}/user/settings/user/access/api-key-policy/env/env/effective/i18n/*/announcementWEB_API_ENV_KEYS 白名单
环境服务manga_translator/server/core/env_service.pymanga_translator/utils/dotenv_utils.py.env 加载、掩码、写入、热重载与键值规范化
配置管理服务manga_translator/server/core/config_management_service.py服务器配置备份/恢复、预设 CRUD 与加密、用户配置保存
配置管理路由manga_translator/server/routes/config_management.py/api/admin/config/*/api/presets*/api/admin/presets*/api/config/user*
资源服务与路由manga_translator/server/core/resource_service.pyroutes/resources.pyserver_paths.py提示词/字体上传、列表、删除、统计与存储布局
配置管理核心manga_translator/server/core/config_manager.pyapi_key_policy.pyresponse_utils.pyruntime_api.py默认配置、管理员设置、策略合并、apply_user_env_vars 与运行时覆盖
服务装配manga_translator/server/main.py路由注册、静态 mount、init_server_config_file
UI/i18nmanga_translator/server/static/script.jsindex.htmljs/shared/api-key-schema.jsdesktop_qt_ui/locales/en_US.jsonzh_CN.jsonkey 映射、硬编码文案、缺失 key 的 fallback