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.port、ankiconnect.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 的同步服务器地址
打开 Anki,进入
设置→同步,将自托管同步服务器(自定义同步服务器地址)修改为:http://127.0.0.1:8080如果第 1.1 节修改过
SYNC_PORT,则这里的8080也要改为同样的端口号。关闭 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 中设置同步服务器
打开手机上的 Anki,进入
设置→同步,将自定义同步服务器地址改为:http://电脑的ip地址:8080其中
电脑的ip地址为上一步获取的 IP,8080为第 1.1 节设置的SYNC_PORT。设置完成后,使用前面设置的用户名和密码(
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()与Deck、Card、Model、Note等类,通过http://127.0.0.1:8765调用createDeck、createModel、addNote、deleteNotes等 AnkiConnect 动作(version: 6协议)。其中Note.add会把audio、picture、video三类媒体随卡片一并提交。 - 制卡配置项: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),仅供参考