简约的 AI 生图 Tag 选择器 · 初音未来主题 · Windows 单文件 exe
把 AI 绘画常用的 tag 分门别类摆好,点一下加入上方选择框,再点一下移出, 最后按「复制全部」直接粘进 ComfyUI / NovelAI / Stable Diffusion WebUI / Illustrious / Pony。
支持 中文搜英文:输入「长发」就能找到 long_hair。
界面是初音未来主题:随程序附带的 MIKU 壁纸 + 可调亚克力磨砂质感 + 缓慢流动的背景光晕,
左下角还有一只会挤压回弹的 MIKU 立绘。
→ 到 Releases 页面下载 ComfyUI_TagSelect.exe
双击即可运行,不需要安装 Python,约 40~60 MB。同目录的 SHA256SUMS.txt 可用于校验下载完整性。
exe 由 GitHub Actions 在
windows-latest上自动构建 (工作流),每次推送到main或打版本标签都会重新打包并上传。
截图使用的是内置的深蓝渐变背景 —— 本仓库不附带壁纸图片, 想换成插画主题请见 壁纸。
| 需求 | 实现 |
|---|---|
| 分门别类的 tag | 23 个语义分类,17,700+ 精选标签,背后可检索 19 万条全量库 |
| 参考 NovelAI / Danbooru 标签 | 数据来自 Danbooru 公开标签集(含中文翻译),并额外补充 NovelAI / SD 生态的画质与负面提示词 |
| R18 内容 + 开关(默认关闭) | 顶栏 R18 开关,默认关闭;关闭时 R18 分类与搜索结果全部隐藏 |
| 初音未来主题 UI | Miku 配色(#39C5BB)+ Q 版未来彩蛋 |
| 壁纸完全覆盖、不留白 | KeepAspectRatioByExpanding + 居中裁剪,任意窗口比例都铺满 |
| 主界面直接是 tag,设置放左侧栏 | 左侧侧边栏:标签库 / 预设 / 自定义标签 / 设置 / 关于 |
| tag 搜索 | 中英混合搜索,支持别名、前缀、包含、中文名匹配,按热度排序 |
| 中文搜英文 | ✅ 输入「双马尾」→ twintails |
| 自定义 tag | 「自定义标签」页可添加,之后能搜索、能选择,支持分组与备注 |
| 保存自定义预设 | 选择框上的「存为预设」,或预设页保存当前选择 |
| 常驻预设 | 81 个内置预设 / 8 个分组(NovelAI「V3/V4」、SD1.5、SDXL、Pony V6 XL、Illustrious / NoobAI 的官方或社区标准质量串与负面串) |
| 点击加入 / 再次点击移除 | ✅ 被选中的 tag 显示为蓝色渐变 |
| 复制全部 | ✅ 右上角「复制全部」(Ctrl+Shift+C),5 种分隔格式可选 |
| 分类可展开 | 分类胶囊收起时单行横滚,点右侧 ⌄ 展开成多行,一屏看全 23 个分类 |
| MIKU 立绘 | 侧边栏与「关于」页共用同一套立绘,点击有小黄鸭式挤压回弹,下葱雨时在两张图之间切换 |
| 背景动效 | 缓慢游走的光晕 + 上浮星尘,可在设置里关闭或调强度 |
| 亚克力质感 | 面板带磨砂颗粒,滑块可调(0 = 清爽玻璃,100 = 明显亚克力) |
到 Releases 页面 下载
ComfyUI_TagSelect.exe,双击即可,不需要安装 Python。
(如果你是自己从源码打包的,产物在 dist\ComfyUI_TagSelect.exe。)
先克隆仓库(标签数据已经打包在仓库里,克隆完就能跑):
git clone https://github.com/Luoury/ComfyUI_TagSelect.git
cd ComfyUI_TagSelect需要 Python 3.10 ~ 3.12(PyQt5 与 PyInstaller 的 wheel 最齐全)。
# Windows:双击 run.bat 即可(会自动建虚拟环境、装依赖)
# 或者手动:
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt # Windows
# source .venv/bin/activate && pip install -r requirements.txt # Linux / macOS
python app.py标签数据已经随仓库提供(
assets/data/下的三个文件),开箱即用,不需要额外生成。 程序同时兼容 PySide6:环境里只有 PySide6 没有 PyQt5 时也能直接运行。只有想重新生成标签数据时,才需要把
supermarket.json和danbooru.csv放到.work/目录下,再执行python tools/build_data.py。
:: Windows —— 双击即可,会自动完成建环境、装依赖、生成数据、打包
build_exe.bat产物:dist\ComfyUI_TagSelect.exe(单文件,约 40~60 MB,双击即用)
Linux / macOS:
./build_exe.sh # 产物在 dist/ComfyUI_TagSelect想改成「文件夹模式」(启动更快,避免每次解压):
打开 ComfyUI_TagSelect.spec,把 ONEFILE 改成 False,重新执行打包命令即可。
没有 Windows 机器也能出 exe —— 仓库带了一条 GitHub Actions 工作流
.github/workflows/build-windows.yml,
在 GitHub 自己的 windows-latest 上完成打包并作为 Release 附件发布。
触发方式:
| 操作 | 结果 |
|---|---|
push 到 main |
按 cts/__init__.py 里的 __version__ 发布到 vX.Y |
push 形如 v1.2 的标签 |
发布到该标签 |
| Actions 页面手动 Run workflow | 同第一条 |
每次构建会依次执行:
- 检查
assets/data/三个数据文件是否齐全 - 跑
tools/selftest.py(离屏,99 项断言) pyinstaller ComfyUI_TagSelect.spec打包单文件 exe- 跑
tools/smoke_test.py—— 启动 exe 等 14 秒,确认不是秒退 - 生成
SHA256SUMS.txt,把 exe 与校验和上传到对应 Release - 同时留一份 workflow artifact(保留 30 天)
关闭了 UPX 压缩:压缩后的 PyInstaller 产物经常被杀毒软件误报,不值得。
┌──────────┬──────────────────────────────────────────────────────────┐
│ MIKU │ 🔍 搜索标签(中文 / 英文 / 别名) R18 ⚪ 统计 │
│ Logo ├──────────────────────────────────────────────────────────┤
│ │ 已选标签 12 [存为预设] [导出] [清空] [复制全部] │
│ ▸ 标签库 │ ┌────────────────────────────────────────────────────┐ │
│ 预设 │ │ 1girl × long_hair × smile × ... ← 蓝色=已选中 │ │
│ 自定义 │ └────────────────────────────────────────────────────┘ │
│ 设置 ├──────────────────────────────────────────────────────────┤
│ 关于 │ [热门][画质与负面][元标签][人数构图][头发][眼睛]... │
│ │ ┌────────────────────────────────────────────────────┐ │
│ chibi │ │ ●1girl 一个女孩 ●long_hair 长发 ●smile 微笑 │ │
│ miku │ │ ●blue_eyes 蓝眼睛 ... ← 单击加入/移出 │ │
│ │ └────────────────────────────────────────────────────┘ │
└──────────┴──────────────────────────────────────────────────────────┘
- 最上面的框就是提示词框:点标签加入,点框里的
×或再点原标签即可移出。 - 左侧栏可收起(
Ctrl+B),收起后只剩图标。 - 右键任意标签:复制单个标签 / 以它为关键词搜索 / 加入自定义标签。
| 快捷键 | 作用 |
|---|---|
Ctrl + F |
聚焦搜索框 |
Ctrl + Shift + C |
复制全部已选标签 |
Esc |
清空搜索 / 取消聚焦 |
Ctrl + B |
收起 / 展开左侧边栏 |
Ctrl + 1 ~ Ctrl + 5 |
切换左侧页面 |
小彩蛋:在搜索框里输入
39并回车,会下大葱雨 🌱
自定义标签(自定义标签 页)
- 填英文标签(必填)+ 中文名 + 分组 + 备注,点「加入自定义标签」。
- 之后它就出现在
自定义分类里,也能被搜索到、能点选。 - 右键标签库里的任意标签 →「加入自定义标签」可以快速收藏。
预设(预设 页)
- 「我的预设」:把当前选择框里的标签存成预设,一键复用。
- 「常驻预设」:8 个分组、81 个内置预设,覆盖画质、模型、画风、光影、构图、场景、角色模板、负面提示词。
- 每个预设卡片:应用(替换当前选择)/ 追加(保留当前选择)/ 复制正向 / 复制负面。
数据文件位置(设置页可以一键打开):
| 平台 | 路径 |
|---|---|
| Windows | %APPDATA%\ComfyUI_TagSelect\ |
| Linux | ~/.config/ComfyUI_TagSelect/ |
| macOS | ~/Library/Application Support/ComfyUI_TagSelect/ |
想做成绿色便携版:在 exe 同目录放一个空的 portable.txt,数据就会写在 userdata/ 子目录里。
- 位于顶栏右上角,默认关闭。
- 关闭时:R18 分类不出现,搜索结果中的 R18 标签也会被过滤掉。
- 打开时:侧边栏分类列表末尾出现
R18分类,搜索结果包含相关内容,开关会变成粉色。
被判定为 R18 的是明确成人向的标签:裸露(nude / completely_nude / nipples / areola …)、
性器官、性行为(sex / fellatio / creampie …)、以及束缚、露出等性癖标签。
breasts、cleavage、thighhighs、underwear、panties、bikini 这类常见于正常向作品的身体 / 服装标签
不会被隐藏 —— 否则开关一关就没法正常选图了。判定规则写在 tools/build_data.py 的
R18_EXACT / R18_TOKENS / R18_GUARD 里,可以自行增删后重新生成数据。
| 文件 | 内容 | 大小 |
|---|---|---|
assets/data/tags_core.json |
精选可浏览标签,23 个分类,17,000+ 条 | ~780 KB |
assets/data/tags_full.tsv.gz |
全量检索库,193,000+ 条(含英文别名) | ~4.2 MB |
assets/data/presets.json |
81 个常驻预设 | 47 KB |
来源与生成:
- 基础数据:Danbooru 公开标签集(317,423 条,含中文翻译与投稿量),
经
tools/build_data.py做语义分类 + R18 判定 + 别名合并 + 画师降噪后生成。 - 画质 / 负面词条:
masterpiece、best_quality、bad_hands等不是 Danbooru 标签, 由脚本内置的EXTRA_PROMPT_TAGS手工补充,保证选得到。 - 常驻预设:来自 NovelAI 官方文档、NoobAI / Illustrious / Pony V6 XL 模型卡与社区通用写法,
来源清单见
assets/data/presets_sources.md,逐条校验报告见assets/data/presets_check.txt。
重新生成(需要把 supermarket.json 与 danbooru.csv 放在 .work/ 下):
python tools/build_data.py
# 可指定目录:
python tools/build_data.py --input-dir /path/to/data --output-dir assets/data脚本会自动分类、跑自检并打印每个分类的抽样结果。
程序自带一张默认壁纸(assets/wallpapers/miku_meteor.jpg,夜空流星),
第一次启动就会用它;同时程序也会画一张初音配色的星空渐变作为兜底背景。
最简单:打开 设置 → 外观 → 「添加图片…」,选一张图,程序会把它复制到用户壁纸目录 并立刻应用。想批量放图,也可以点「打开壁纸文件夹」把图片丢进去,重启程序即可识别。 不想用壁纸就点「用默认背景」。
用户壁纸目录(持久保存,重启 exe 不会丢):
| 平台 | 路径 |
|---|---|
| Windows | %APPDATA%\ComfyUI_TagSelect\wallpapers\ |
| Linux | ~/.config/ComfyUI_TagSelect/wallpapers/ |
| macOS | ~/Library/Application Support/ComfyUI_TagSelect/wallpapers/ |
便携模式(程序目录下有
portable.txt)时是<程序目录>\userdata\wallpapers\。
壁纸用 KeepAspectRatioByExpanding + 居中裁剪绘制,任何窗口比例下都铺满、不会留白;
「背景压暗」「背景模糊」两个滑块对默认星空背景同样生效。
⚠️ 不要把图片放进 exe 旁边的assets/wallpapers/—— 单文件 exe 的assets/是 每次启动都会重建的临时解包目录,放进去下次启动就没了。那个目录只在 「源码运行 / 自己重新打包」时有意义(spec 会把整个assets/打进去成为内置壁纸)。
附带的默认壁纸版权归原作者所有,仅供个人学习自用,请勿商用。
左下角那只 MIKU(侧边栏收起时也在):
- 悬停会亮起一圈青光;点击有「小黄鸭」式的挤压回弹 —— 按下去纵向压扁、横向撑开,
松手后用
OutElastic弹回来并轻微过冲; - 点击同时会下一场大葱雨 🌱,期间立绘在「咬着大葱」和「眯眼大叫」两张图之间来回切换, 雨停了自动回到初始表情;
- 「关于」页那只 MIKU 是同一套,点它也有一样的效果。
其它:
- 搜索框输入
39回车 —— 同样的葱雨效果。39是ミク的谐音,也是她最经典的应援数字 - 鼠标悬停标签可以看到投稿量、中文名与 R18 标记
- 亚克力质感滑块拉满,面板会有明显的磨砂颗粒感
- 背景动效可以在设置里关掉(省电 / 觉得晃眼时)
ComfyUI_TagSelect/
├── app.py # 程序入口
├── cts/ # 主程序包
│ ├── app.py # QApplication 启动
│ ├── qtcompat.py # PyQt5 / PySide6 兼容层
│ ├── theme.py # 初音配色、字体、全局 QSS
│ ├── resources.py # 资源路径 / 用户数据目录(含便携模式)
│ ├── data_store.py # 标签数据库 + 全库搜索索引(后台线程加载)
│ ├── user_data.py # 设置 / 自定义标签 / 预设 的读写
│ ├── icons.py # QPainter 手绘线性图标
│ ├── miku_art.py # 大葱、Logo 的矢量绘制
│ ├── main_window.py # 主窗口:搜索栏 + 已选框 + 分类标签网格
│ └── widgets/
│ ├── background.py # 壁纸全覆盖绘制
│ ├── tag_canvas.py # 虚拟化标签画布(可承载上万标签)
│ ├── chip_paint.py # 胶囊统一绘制(选中=蓝色渐变)
│ ├── common.py # 玻璃卡片、胶囊按钮、开关、Toast
│ ├── miku_sprite.py # MIKU 立绘:挤压回弹动效 + 葱雨切图
│ ├── flow_layout.py # 分类胶囊的单行 / 换行布局
│ ├── sidebar.py # 左侧导航 + MIKU 彩蛋
│ ├── pages.py # 预设 / 自定义标签 / 设置 / 关于
│ └── leek_rain.py # 大葱雨彩蛋
├── assets/
│ ├── miku/ # 3 张 MIKU 立绘(idle / leek / yell)
│ ├── wallpapers/ # 默认壁纸 + 放自己的图(见「壁纸」一节)
│ ├── icons/ # 应用图标 (.ico / .png)
│ └── data/ # 标签数据与预设
├── docs/ # 文档截图
├── tools/
│ ├── build_data.py # 标签数据生成流水线
│ ├── selftest.py # 离屏功能自测(99 项断言)
│ ├── smoke_test.py # 打包产物冒烟测试(启动后检查是否秒退)
│ ├── version.py # 输出 __version__,CI 用来推导发布标签
│ └── screenshot.py # 开发用离屏截图校对工具
├── .github/workflows/ # GitHub Actions:自动打包 Windows exe
├── ComfyUI_TagSelect.spec # PyInstaller 配置
├── build_exe.bat / build_exe.sh
├── run.bat
├── requirements.txt
├── LICENSE # MIT
└── README.md
Q:双击 exe 没反应 / 闪退?
A:多半是打包时缺了数据文件。确认 assets/data/tags_core.json 存在,然后重新执行 build_exe.bat。
Q:启动比较慢?
A:单文件 exe 每次启动都要解压到临时目录。把 ComfyUI_TagSelect.spec 里的 ONEFILE 改成 False
重新打包成文件夹模式,启动会快很多。
Q:搜索某个标签搜不到? A:程序启动后会后台加载全量索引(约 0.5 秒),加载完成前只搜核心库, 右上角统计会显示「核心 17,789 · 全库 …」,变成具体数字后就代表全量库可用了。
Q:怎么把中文标签换成我习惯的叫法?
A:重新生成数据前,改 tools/build_data.py 里对应的分类词表;
或者直接在「自定义标签」页加一条同名标签覆盖显示。(同名自定义标签会覆盖原条目)
Q:想要更多标签?
A:调大 tools/build_data.py 里的 CORE_CAPS(每个分类的核心标签上限),重新生成即可。
Q:界面背景是星空,不是 MIKU 壁纸? A:说明壁纸文件丢了或 key 失效了。去「设置 → 外观」重新点一下「星空流星 · 默认」, 或点「添加图片…」换成自己的图,详见 壁纸。
Q:我把图片放到 exe 旁边的 assets\wallpapers\ 里,程序却认不出来?
A:单文件 exe 的 assets\ 是每次启动都会重建的临时解包目录(PyInstaller 的
sys._MEIPASS),你放进去的文件下次启动就没了,程序也不会去那里找你新增的图。
请改用「设置 → 外观 → 打开壁纸文件夹」(%APPDATA%\ComfyUI_TagSelect\wallpapers\)
或直接点「添加图片…」。
v0.10 的 exe 有这个问题(设置里存的还是临时目录的绝对路径,重启必然失效), v0.11 已修复:壁纸改成用
user:xxx.jpg这样的稳定标识记录。
Q:怎么确认功能都正常?
A:跑 python tools/selftest.py(离屏,不需要显示器),会执行 99 项断言并打印结果。
- 标签数据来自 Danbooru 公开标签库,中文翻译与别名来自社区整理的数据集。
- 常驻预设参考 NovelAI 官方文档、
NoobAI / Illustrious / Pony Diffusion 模型卡与 A1111 社区通用写法,
来源清单见
assets/data/presets_sources.md。 - 本仓库不分发壁纸;
assets/wallpapers/里默认使用的插画版权归各 pixiv 画师所有。 - 「初音未来 / Hatsune Miku」为 Crypton Future Media 的角色与商标,本项目仅作个人学习用途,与其无关联。
- 代码以 MIT 许可发布。若使用 PyQt5 打包分发,请注意其 GPL 许可要求(也可改用 PySide6 / LGPL)。
完整的数据 / 预设 / 角色商标说明见 LICENSE 末尾的 NOTICE 段落。

