LunaTranslator 大容量制卡同步方案:使用 Anki 本地同步服务器替代 AnkiWeb
2026/9/15 14:26:44 网站建设 项目流程

LunaTranslator 大容量制卡同步方案:使用 Anki 本地同步服务器替代 AnkiWeb

【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator

LunaTranslator 内置的制卡模板通过 AnkiConnect 把查词结果写入 Anki,卡片越积越多后,本地集合体积可能超出 AnkiWeb 官方云同步的体积限制。本篇指南讲解如何启用 Anki 自带的本地同步服务器,把电脑端与手机端的卡组数据通过局域网直连同步,避开云端体积限制,并给出配套的环境变量、批处理脚本、VBS 后台运行方案与底层源码佐证。

背景:为什么需要本地同步服务器

LunaTranslator 的查词窗口内置 Anki 制卡功能,它不直接操作 Anki 数据库,而是通过 AnkiConnect 客户端封装调用 AnkiConnect 插件提供的 HTTP 接口完成建卡。从源码可以看到,LunaTranslator 默认以8765端口、127.0.0.1地址向本机 Anki 发送请求(见 ankiconnect.py),并在查词界面配置中读取ankiconnect.portankiconnect.host两项配置。

当使用 LunaTranslator 内置模板添加的卡片数量较多时,整个 Anki 集合的体积可能超出 AnkiWeb 同步体积限制,导致电脑与手机之间无法通过官方云同步。此时可以改用 Anki 自带的本地同步服务器(--syncserver模式):服务器运行在电脑上,手机与电脑处于同一局域网即可直连同步,不再依赖 AnkiWeb 云端中转,因此不受云同步体积限制。

这种方案的本质是把电脑当作同步服务端,手机作为客户端,二者的集合数据通过局域网传输。需要注意的是,本地同步服务器不代替 AnkiConnect:制卡仍然走 AnkiConnect 写进电脑上的 Anki,本地同步服务器只负责把电脑上的集合同步到其他设备。

一、开启本地同步服务器

1.1 准备启动脚本

在 Windows 的cmd中运行以下命令启动本地同步服务器:

set SYNC_PORT=8080 set SYNC_USER1=user:pass set MAX_SYNC_PAYLOAD_MEGS=10000000 %LOCALAPPDATA%\Programs\Anki\anki.exe --syncserver pause

各环境变量与命令的含义如下:

项目作用说明
SYNC_PORT同步服务器占用的端口号默认8080;若该端口被占用导致启动失败,改为其他端口,后续所有配置(电脑端与手机端)都要同步修改
SYNC_USER1自定义的登录账号格式为用户名:密码,例如user:pass;可随时更改,之后每次登录同步服务器都要填写这组凭据
MAX_SYNC_PAYLOAD_MEGS允许的最大同步载荷体积(MB)示例中设为10000000,用于放宽单次同步的数据量上限
%LOCALAPPDATA%\Programs\Anki\anki.exe --syncserver以同步服务器模式启动 Anki%LOCALAPPDATA%\Programs\Anki\anki.exe是 Anki 的默认安装路径;若你的 Anki 安装在其他位置,请自行替换为该路径

提示:pause的作用是让窗口在服务器退出前保持打开,方便查看运行日志与错误信息。

1.2 保存为批处理脚本

为了每次启动更方便,可以把上述代码保存为一个XXX.bat文件(文件名可任意,例如anki_sync_server.bat),之后双击即可运行

1.3 启动成功与失败的判断

  • 启动成功:窗口停留在运行状态,服务器持续监听8080端口,等待客户端连接。
  • 启动失败:最常见原因是SYNC_PORT指定的端口已被其他程序占用,此时会报错退出。解决办法是更换一个未被占用的端口号(例如8081),并记住该端口,后续电脑端与手机端的同步地址都要使用新端口。

建议先用 bat 版本在前台运行并确认无误,再考虑后台化。

1.4 隐藏控制台、后台运行(可选)

如果希望服务器在后台静默运行、不弹出黑色控制台窗口,可以再创建一个YYY.vbs文件,写入以下内容:

Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "XXX.bat", 0, False

其中XXX.bat必须与第 1.2 节保存的批处理文件名完全一致(不含路径时默认在当前目录查找)。双击YYY.vbs即可后台运行。

注意:VBS 后台运行时看不到任何错误信息,排错困难。建议先用 bat 版本调试通过后,再改用 VBS 方式常驻后台。

二、将电脑上的数据上传到本地同步服务器

首次启动本地同步服务器时,服务器端内容是空白的。必须先把电脑上的 Anki 数据上传到本地服务器,之后手机才能从该服务器下载数据。

2.1 修改 Anki 的同步服务器地址

  1. 打开 Anki,进入设置同步,将自托管同步服务器(自定义同步服务器地址)修改为:

    http://127.0.0.1:8080

    如果第 1.1 节修改过SYNC_PORT,则这里的8080也要改为同样的端口号。

  2. 关闭 Anki 后重新打开,使上述修改生效。

2.2 登录并上传数据

重启 Anki 后,使用第 1.1 节设置的用户名和密码(即user:pass中的两部分)进行登录,然后按照 Anki 的同步提示,把电脑上的数据同步/上传到本地同步服务器即可。此时数据已进入服务器,等待其他客户端下载。

三、在手机上从本地同步服务器下载数据

3.1 确保手机与电脑处于同一局域网

手机和电脑必须能互相访问,通常做法是连接到同一个路由器(同一 WiFi)。如果两边同时连接校园网等隔离网络时仍无法通信,可以在电脑上开启移动热点,让手机连接电脑的热点,即可保证二者在同一局域网内。

3.2 获取电脑的 IP 地址

在电脑的cmd中运行以下命令,可以列出所有候选的 IPv4 地址:

for /f "tokens=2 delims=:" %A in ('ipconfig ^| findstr /i "IPv4"') do @for /f "tokens=*" %B in ("%A") do @echo %B

若输出多个 IP,说明电脑有多个网卡/网络接口,后续逐一测试即可。注意:该命令中的%A%B适用于命令行直接执行;如果写入.bat文件,需将百分号写成%%A%%B

3.3 在手机 Anki 中设置同步服务器

  1. 打开手机上的 Anki,进入设置同步,将自定义同步服务器地址改为:

    http://电脑的ip地址:8080

    其中电脑的ip地址为上一步获取的 IP,8080为第 1.1 节设置的SYNC_PORT

  2. 设置完成后,使用前面设置的用户名和密码(user:pass)登录,然后按照 Anki 的提示执行同步,即可把电脑上的卡组数据下载到手机。

3.4 同步失败的排查

如果手机同步失败,最常见的原因是填写的 IP 地址错误(例如电脑 IP 发生了变化、填成了其他网卡的 IP)。更换正确的 IP 地址后,重新登录测试即可。

四、与 LunaTranslator 制卡链路的关系与源码佐证

本地同步服务器只解决“多设备之间的数据同步”问题,而 LunaTranslator 的制卡功能本身依赖 AnkiConnect。理解这条链路有助于判断问题出在哪一环:

LunaTranslator 查词窗口 ↓ AnkiConnect HTTP 请求(默认 127.0.0.1:8765) 本机 Anki(AnkiConnect 插件) ↓ 集合数据 本地同步服务器(--syncserver,端口 8080) ↓ 局域网 手机 Anki(客户端)

从源码可以进一步印证这一架构:

  • AnkiConnect 客户端封装:ankiconnect.py 定义了invoke()DeckCardModelNote等类,通过http://127.0.0.1:8765调用createDeckcreateModeladdNotedeleteNotes等 AnkiConnect 动作(version: 6协议)。其中Note.add会把audiopicturevideo三类媒体随卡片一并提交。
  • 制卡配置项:showword.py 中的addanki()读取ankiconnect配置段,包括默认端口8765、默认主机127.0.0.1、默认模型名modelofluna、默认牌组lunadeck;默认配置文件中对应存在ankiconnect配置段(DeckNameS: ["lunadeck"]tags: [])。
  • 内置制卡模板:正面模板 front.html 与背面模板 back.html 定义了{{word}}{{rubytextHtml}}{{example_sentence}}{{screenshot}}{{remarks}}{{audio_for_word}}等字段,配合 style.css 渲染;showword.py 中的tryloadankitemplates()负责加载这些模板并写入 Anki 模型。
  • 自定义制卡生成器:在查词窗口开启“使用自定义制卡生成器”后,LunaTranslator 会加载用户提供的 myanki_v3.py 作为钩子,其AnkiFields()ParseFieldsData()可让用户改写写入 Anki 的字段与媒体数据。

这也解释了为什么制卡量增大后会触及 AnkiWeb 同步体积限制:LunaTranslator 的模板默认携带单词音频、例句音频与游戏截图(screenshot)等媒体,单张卡片体积较大。因此,当云端同步受限时,按本文方案切换到本地同步服务器是更合适的做法。

五、常见问题速查

现象可能原因处理办法
bat 启动服务器即退出SYNC_PORT端口被占用更换端口号,并同步修改电脑端与手机端的同步地址
电脑端登录失败用户名/密码与SYNC_USER1不一致使用user:pass格式中的用户名与密码登录
电脑端同步无反应修改同步地址后未重启 Anki关闭并重新打开 Anki 后再登录同步
手机端连接不上手机与电脑不在同一局域网,或 IP 填写错误连同一路由器/电脑热点;用ipconfig命令核对 IP 后重新登录
手机端同步失败电脑 IP 变化(如 DHCP 重新分配)重新获取电脑 IP 并更新手机端同步地址

本地同步服务器的使用前提是:电脑端 Anki 需长期运行(服务器即 Anki 本身),且手机端与电脑端网络互通。若还需了解 LunaTranslator 与 AnkiConnect 的完整集成步骤(安装 AnkiConnect 插件、查词制卡入口),可参见 Anki 集成说明。

【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询