cleanyourtv-app
A community-built phone app for Clean Your TV: clean up an Android TV from your phone. No laptop, no coding agent, nothing uninstalled.
NovelAI中文化助手
Translation pending
OtherJavaScript · CSSGitHub @TomorrowX6OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗让中文用户用起 NovelAI 更顺手
在提示词框里打中文就能联想英文标签,英文标签附上中文释义,界面和教程也能切换成中文。
功能 · 安装 · 使用 · 参与标签翻译 · 已知限制 · 开发 · 数据来源与许可
非官方项目,与 NovelAI 及其开发商 Anlatan 无关。
同一份代码支持 Chrome、Edge 和 Firefox 扩展「NovelAI中文化助手」,以及用户脚本「NovelAI 中文标签联想」(Tampermonkey / Violentmonkey)。标签词典和界面译文都打包在里面,联想和翻译在浏览器里完成,不收集个人信息(见隐私政策)。
, ,否则「长发,猫耳」会被当成一个标签。权重写法 1.2::标签:: 里的「:」也会转成 :。| 方式 | 从哪里装 | 要求 |
|---|---|---|
| Chrome 扩展 | Chrome 应用商店 | Chrome 111 或更新 |
| Edge 扩展 | Edge 加载项商店 | Edge 111 或更新 |
| Firefox 附加组件 | Firefox 附加组件站 | Firefox 140 或更新(安卓版 142) |
| 用户脚本 | novelai-zh-tags.user.js | Tampermonkey 或 Violentmonkey |
[!NOTE] 几种方式选一种,不要同时启用。应用商店里的 Chrome 扩展和从 Releases 手动加载的扩展 ID 不同,是两个扩展,换装时先移除原来那个。
需要 Chrome 111 或更新的版本。
从 Chrome 应用商店 安装,装好后刷新 NovelAI 页面。之后扩展会随应用商店自动更新。
novelai-zh-tags-版本-chrome.zip(Edge 用 -edge.zip,内容相同)并解压。chrome://extensions(Edge 是 edge://extensions),打开「开发者模式」,点「加载已解压的扩展程序」,选解压出来的文件夹。这样装的扩展不会自动更新。出新版时,下载新的 zip 覆盖到同一个文件夹,再在扩展页点刷新按钮。
Releases 里的 -chrome.crx、-edge.crx 是自签名的安装包:Windows 和 macOS 上的 Chrome 只接受应用商店签名的 .crx,拖进去会报 CRX_REQUIRED_PROOF_MISSING,它只适合通过企业策略部署,或在允许这类安装包的浏览器里使用。
需要 Edge 111 或更新的版本。
从 Edge 加载项商店 安装,装好后刷新 NovelAI 页面。之后扩展会随应用商店自动更新。
需要 Firefox 140 或更新的版本(安卓版 142)。
从 Firefox 附加组件站 安装,桌面版和安卓版都可以,装好后刷新 NovelAI 页面。之后附加组件会自动更新。
在 Releases 下载 novelai-zh-tags-版本-firefox.zip(-firefox.xpi 是同一个包,没经 Mozilla 签名,正式版 Firefox 装不上),打开 about:debugging#/runtime/this-firefox,点「临时载入附加组件」,选这个 zip。临时载入的附加组件在关闭 Firefox 后会被移除;正式版 Firefox 只能长期安装经过 Mozilla 签名的附加组件。
chrome://extensions 打开开发者模式),否则脚本不会运行。脚本管理器会定期检查 main 分支上的新版本并自动更新,也可以手动「检查更新」。1.3.0 及更早的版本没有更新地址,要手动升级一次:用新文件内容替换原脚本。
在提示词框里输入两个字以上的中文就会出现联想(NovelAI 只在片段长度为 2–20 个字符时请求联想,单字不会触发)。联想面板、点选和键盘操作都是 NovelAI 自己的,插入的是英文标签。含假名的日文输入原样交给 NovelAI 处理。
点提示词框标题栏右侧的「中」按钮,框下面会列出提示词里的每个标签和它的中文,再点一次关掉。基础提示词、负面提示词和角色提示词的框上都有这个按钮,开关对所有框生效,刷新后保持。扩展面板设置里的「中文对照」是同一个开关,在那里改也当场生效。
1.2::标签:: 和 {}、[] 会去掉,source#hug 这类动作标签按 # 后面的部分查,重复的标签只列一次。(标签:1.2)、((标签)),中文输入法打出的全角括号和逗号,粘在第一个负面标签前的 Negative prompt:,Danbooru 网页侧栏复制的 ? blue eyes 1.3m,标注工具带置信度的 long hair 0.845,用句号隔开的 vibrant. happy.,名和姓写反的角色名,「角色 from 作品」。artist:xxx 显示「画师」,year 2025 显示「2025年画风」,采样器、种子等参数显示「生成参数(不是标签)」。没有通用中文名的标签(3d、Love Live!)直接显示原名。worth quality、absurdes)用黄色显示正确写法的中文,鼠标停留时看正确写法,方便发现写错了。panda plushie 显示「熊猫·毛绒动物玩具」,flowers in vase 显示「花瓶里的花朵」。只用通用标签和常用词拼,人物、作品名不拼;拼出来的译名颜色稍淡,鼠标停留时有提示,仅供参考。artist: 的画师名、自然语言长句、冷门标签)暗着显示,可以到编辑器里补上译名。在左侧菜单最下方的语言选单里选 ZH,或在「用户设置 → 界面 → 界面语言」里选「中文」,切回 EN、JP 也在同一处。
data/ui-zh.json(见「更新界面译文」)。点工具栏上的扩展图标打开面板。面板大小固定,首页和设置之间切换时一个缩小淡出、一个放大淡入;提示消息出现在底栏,不会把面板撑高。
在 NovelAI 标签页上改设置,页面会自动刷新(中文对照不用刷新,当场生效)。没打开 NovelAI 时也能改,改动先存在扩展里,刷新或打开 NovelAI 页面时生效。
用户脚本没有面板,可以在 NovelAI 页面的控制台里改设置,刷新后生效(removeItem 恢复默认):
localStorage.setItem('nzh-tags', 'off') // 关掉中文标签
localStorage.setItem('nzh-community-auto', 'off') // 关掉社区译名的自动更新
localStorage.setItem('nzh-community-hours', '6') // 检查间隔改成 6 小时,可选 1、6、12、24、168
觉得某个标签的译名不准,或者用某个说法搜不到想要的标签,可以在 NovelAI Tag Editor 修改。它仿照 EhTagTranslation 的 EhTag Editor:
/正则/ 搜索。「显示」里的「未翻译」是还没有中文的标签,「社区修订」是改过的标签。/ 分隔),右边实时预览,「编辑日志」里是这个标签已生效的修改记录。只能改标签的译名和检索词,界面文案随版本发布。data/zh-community.tsv,扩展几小时内用上;没通过会写明原因。自己的修改审核到哪一步,在编辑器右上角菜单的「我的提交」里看;所有待审核的修改公开列在 审核页。location → 场景)也能显示中文和参与中文联想,不要求图片数。拉来的内容同样检查:必须含汉字、长度有限,不能有 < > 和网址;新标签名不能含逗号、|、大括号、方括号、#、:: 这类会影响提示词的字符。编辑器的代码和部署方法见 worker/。
.image-prompt-suggestions 面板结构,以及提示词框(data-prompt-input)和它上方标题栏的位置;界面汉化依赖 Turbopack 的模块注册方式和 languageNames、Localization、Session 这些导出名。NovelAI 改版后可能需要更新:界面汉化失效时语言选单里不再有中文、界面回到英文,标签联想不受影响。需要 Node.js 18 或更高版本;编辑器(worker/)的测试需要 Node.js 22.13 或更高版本。
npm run build # 生成 dist/ 下的脚本、更新用的 .meta.js、词典和繁简对照
npm test # 检索质量回归测试,用例在 scripts/search-cases.tsv
npm run test:popup # 扩展面板和设置同步的测试
npm run test:worker # 编辑器的测试
npm run crx # 打包 Chrome 扩展到 build/
node scripts/test.mjs 黑丝 刘海 # 查看某些词的联想结果
npm run build -- --refresh # 重新下载上游词典
npm run crx 输出:
build/extension/:解压的扩展,manifest 带公钥,「加载已解压的扩展程序」时扩展 ID 固定。build/novelai-zh-tags-版本-chrome.zip:上架 Chrome 应用商店用的压缩包(不含公钥)。-edge.zip 内容相同,上架 Edge 加载项商店。build/novelai-zh-tags-版本-chrome.crx、-edge.crx:用私钥签名的安装包。build/firefox/ 和 build/novelai-zh-tags-版本-firefox.zip(.xpi 同内容):Firefox 版,内容和 Chrome 版相同,manifest 里多了附加组件 ID(novelai-zh-tags@azusamoe)、最低版本和「不收集数据」的声明。签名私钥第一次打包时生成在 .keys/novelai-zh-tags.pem(已在 .gitignore 里),也可以用环境变量 CRX_KEY 指定。扩展 ID 由私钥决定,换了私钥就成了另一个扩展,请备份好。
上架用的介绍文字、截图、宣传图和隐私权一栏的填法在 store/,隐私政策见 PRIVACY.md。面板的首页与设置分层参考了 EhSyringe。
data/zh-override.csv:标签,译名,替换某个标签的显示译名(修正错误翻译),优先级最高。data/zh-curated.csv:标签,译名,补充检索词,审定结果。译名留空表示只补检索词;检索词用 / 分隔,前面加 - 表示删掉一个错误的检索词(如 fear_kubrick,,-害怕侧目)。data/zh-extra.csv:标签,词1/词2,追加检索词(俗称、简称),不改变显示内容。词表里没有的标签也会收录,比如 NovelAI 的质量词 masterpiece。data/zh-words.csv:英文,译名/检索词,提示词里常写、但不是 Danbooru 标签的描述词(dramatic、cinematic lighting),让中文对照也能显示中文,检索时排在标签后面。已经是标签或 Danbooru 别名的词构建时会提示删掉;译名完全相同的写法只在检索里出一条。译名写成 =标签 表示是已有标签的另一种写法(1 girl,=1girl)。写成 ?标签 表示常见的拼写错误(worth quality,?worst quality),对照里用黄色显示正确写法的中文(鼠标停留时看正确写法),不当成别名。data/novelai-rename.csv:Danbooru新名,NovelAI用的名字,NovelAI 不认识新名字时输出旧名字。data/zh-new.csv:tag,category,aliases,zh,count,列与来源数据相同,收录 Danbooru 上有、来源数据里没有的标签(检索词用 | 分隔)。来源数据以后有了同一个标签时以来源数据为准。标签用 Danbooru 写法,空格或下划线都可以,别名会自动归并到正式标签。改完后运行 npm run build 和 npm test。
data/ui-zh.json 每行一条 "路径": ["英文", "中文"],路径对应 NovelAI 文案对象的键(如 image.undesiredContent)。中文留空表示还没翻译,和英文相同表示有意保留英文,这两种都按英文显示。[0]、[1] 是 NovelAI 填入数值的占位符,译文里要原样保留,npm test 会检查。
data/ui-zh-hard.json 是写死在页面代码里的文字,每行一条 [[原文片段...], [译文片段...]]。片段是一个元素里按顺序排列的全部文本节点,译文片段个数必须和原文相同,加粗、链接落在对应位置的片段上,不需要的片段写空字符串。名字、数字这类动态内容在原文和译文的同一位置写 null,显示时保持原样。
NovelAI 更新后文案会增减,用下面的命令对照线上版本:
node scripts/ui-strings.mjs # 列出新增(+)、删除(-)、英文改动(~)的条目,以及代码里找不到的写死文字(?)
node scripts/ui-strings.mjs --write # 同步到 data/ui-zh.json:新增条目中文留空,英文改动的保留旧译文,需要复核
node scripts/ui-strings.mjs --untranslated # 列出中文还空着的条目
main 分支就是用户脚本自动更新的来源:脚本或词典有改动时,要先把 package.json 的 version 调高再构建,否则脚本管理器不会推送更新。CI(.github/workflows/ci.yml)在每次推送和 PR 时构建、跑测试,并检查 dist/ 是否已重新构建、版本号是否已调高(本地可以运行 node scripts/check-version.mjs origin/main)。
把调高了版本的提交合并到 main 后,推送同名标签(如 git tag 1.7.1 && git push origin 1.7.1):.github/workflows/release.yml 会构建、跑测试,发布 GitHub Release,附上用户脚本,以及 Chrome、Edge 的 -chrome.crx/.zip、-edge.crx/.zip 和 Firefox 的 -firefox.zip/.xpi。
gh secret set CRX_PRIVATE_KEY < .keys/novelai-zh-tags.pem。package.json 里的 nzh.extensionId,对不上就失败,不会悄悄换掉扩展 ID。中文联想:NovelAI 对含汉字或假名的输入片段会以 lang=jp 请求 image.novelai.net/ai/generate-image/suggest-tags,返回 [{jp_tag, en_tag, power}],面板显示「英文标签 + 本地语副标题」,点选后插入英文标签。脚本拦截 fetch:只含汉字、不含假名的请求改由内置中文词典应答,并把中文放在 jp_tag 里,所以显示、点选和键盘操作都走 NovelAI 自己的逻辑。本地词典查不到时回退到 NovelAI 自带的日文匹配,能翻译的副标题也换成中文。英文输入的联想通过 MutationObserver 在每一项下补一行中文。
输入法:NovelAI 拼查询串时用的是「光标前的旧文本 + 新输入」。微软拼音这类会把拼音写进编辑器的输入法,上屏时查询会变成 luo'li萝莉。所以脚本不用请求里的 prompt 参数,而是读取光标前的实际文本作为片段。组字过程中触发的联想先挂起,上屏后再按实际文本回答,选字时停顿不会冒出拼音的乱联想。
中文对照:每个提示词框是带 data-prompt-input 的元素,里面是 ProseMirror 编辑器。脚本在框上方的标题栏里加按钮、在框后面加对照面板,把编辑器每段的文字按逗号、|、顿号和 :: 切开后查词典。不往编辑器里插任何元素,ProseMirror 不受影响;点对照项时设置页面的选区,ProseMirror 会同步成自己的选区。
检索:按「精确 > 前缀 > 包含 > 宽松(字间最多隔 3 个字)」匹配,再结合 Danbooru 使用次数综合排序。繁体字按 OpenCC 的对照表逐字转成简体后再检索。词典约 7.8 万条,在生图页空闲时解析,从其他页面切过来时在提示词框获得焦点时解析。Node 下实测解析约 0.25 秒,单次检索约 4 ms。
界面汉化:NovelAI 的界面文字都来自一个英文文案对象,日文是在它上面合并一份日文覆盖,再由 Localization atom 按账号设置的 uiLanguage 算出当前文案。NovelAI 用 Turbopack 打包,脚本在页面脚本加载前接管 globalThis.TURBOPACK,在模块注册导出时给语言表 languageNames / languageIcons 加上中文,并让 Localization atom 在 uiLanguage 为 zh 时把中文合并到算好的文案上,没翻译的条目保持英文。保存设置(PUT /user/clientsettings)时把 zh 换成 en、在 localStorage 记下选的是中文,读取账号数据(GET /user/data)时再换回 zh。没登录时 NovelAI 不走这两个接口,设置直接存在 localStorage 的 noAccountSettings 里,扩展面板开关中文界面时直接改其中的 uiLanguage。
写死的文字:教程等写在组件里的文字不经过文案对象,界面为中文时直接在页面上替换:一个元素里按顺序排列的全部文本节点(加粗、链接把一段话切开的地方)和原文完全一致时,换成同样个数的中文片段。只改文本节点的内容,不动元素结构,React 照常更新;编辑器和输入框里的文字不处理,切回其他语言时还原。
data/zh-curated.csv:在此基础上的审定结果,涉及 8,341 个标签(通用 5,407、角色 2,447、作品 469、元标签 18)。
data/zh-override.csv。data/zh-new.csv:2026 年 10 月 Danbooru 上图片数 50 以上、来源数据里却没有的标签,共 2,687 个(通用 882、角色 1,506、作品 288、元标签 11),多是 2025 年以后新出现的,或是 Danbooru 改了名的(如 cum pool → cum puddle、tokyo (city) → tokyo),也有来源数据漏掉的老标签(如 prepuce)。
data/zh-ehtag.csv:EhTagTranslation 的人工译名,对齐到 Danbooru 标签后作为补充检索词,共 2,032 条,如 dark skin「黑皮」、school swimsuit「死库水」。qipao 已在 data/novelai-rename.csv 里换回 china_dress。data/zh-words.csv:不是 Danbooru 标签、但提示词里常写的约 3,800 个英文词和短语(氛围、画风、光影、构图、负面提示词、身体和服装描写等,含成人向内容),另有约 120 个常见拼写错误,从 和 提示词语料的高频词里挑选,由 Claude 翻译,没有经过人工校对。NovelAI 语料里查不到中文的高频短语都过了一遍:画师名、夹着句号或权重数字的残片不收,把未成年人和性内容放在一起的也不收。| 用途 | 来源 | 许可 |
|---|---|---|
| 译名、别名、使用次数 | ame-la/danbooru-tags-data-zh(GitHub) | MIT |
| 补充检索词 | EhTagTranslation/Database | CC BY-NC-SA 3.0 |
| 补充检索词和旧标签译名 | byzod/a1111-sd-webui-tagcomplete-CN | MIT |
| 旧标签名(用于识别改名) | DominikDoom/a1111-sd-webui-tagcomplete | MIT |
| 英文别名(提示词里写 peace sign、sparkles 也能查到中文) | Danbooru 现行的标签别名表 | — |
| 繁简对照 | BYVoid/OpenCC 的 TSCharacters.txt | Apache-2.0 |
审定时参考了标签超市(AGPL-3.0),但没有把它的数据并入词典。
[!IMPORTANT]
data/zh-ehtag.csv和data/zh-curated.csv含 EhTagTranslation 的派生内容,内嵌这些数据的dist/novelai-zh-tags.user.js、Chrome 扩展和 Firefox 附加组件也一样,因此按 CC BY-NC-SA 3.0 提供:转发需署名,不得商用,修改后须以相同许可发布。自己使用不受影响。
(tag:1.2)、((tag)))、中文输入法的全角括号逗号、零宽空格、粘在第一个负面标签前的 Negative prompt:、Danbooru 网页侧栏的 ? blue eyes 1.3m、标注工具的 long hair 0.845、用句号或括号连写的几个标签、名和姓写反的角色名、「角色 from 作品」。artist:xxx 显示「画师」,year 2025 显示「2025年画风」,采样器、种子等显示「生成参数(不是标签)」,BREAK 显示「分段(SD 语法)」。没有通用中文名的标签(3d、Love Live!)也算认得出来,不再暗着显示。artist: 的画师名、拼写错误、长句和少数人反复用的句子。