轻量的 Stable Diffusion 标签编辑器(Vue 3 + Vite)。
目的:为 Stable Diffusion 提供一个本地化的、基于 CSV 的标签(tag)挑选、加权和复制工具,支持通用/画师/角色三类标签、权重调整、符号分层和拖拽排序。
主要特性
- 支持从项目根目录
tags/中读取 CSV(开发环境)或从public/tags/读取(生产静态部署)。 - 兼容 Danbooru 风格的 6 列 CSV:
tag,category,post_count,aliases,is_locked,antecedent_alias,也能容忍没有表头的老式 CSV(只要每行至少包含tag,category,post_count)。 - 分页(每页 30 条)、搜索、页码跳转、按
post_count过滤(全局最小阈值)。 - 选择多标签、拖拽重排、为单个标签设置权重(默认 1,步进 0.1)和符号加权(可多层的
()或{}),复制时将按顺序输出。
快速开始(开发)
# 安装依赖并启动开发服务器
npm install
npm run dev打开浏览器访问 http://localhost:5173(终端会显示实际端口)。
如何放置你的标签文件
-
开发时(推荐调试与本地使用):把 CSV 放到项目根的
tags/目录(即仓库根下的tags/),开发服务器会通过内置中间件自动枚举并提供/tags/_list与/tags/<name>.csv两个接口供前端读取。中间件会:- 优先识别含有标准表头的 CSV(
tag,category,post_count,aliases,is_locked,antecedent_alias); - 若 CSV 为无表头格式,也会尝试基于首条数据行(检查
category和post_count是否为数字)判定并包含该文件; - 如果目录下没有任何符合条件的文件,前端将回退到
public/tags/list.json中列出的示例文件。
- 优先识别含有标准表头的 CSV(
-
生产部署(静态主机):构建后不含开发中间件,建议将需要在生产读取的 CSV 放到
public/tags/,并确保public/tags/list.json列出这些文件名,或者由你的服务器提供与开发中间件等效的静态接口。
CSV 格式说明(务必遵守)
- 文件按 CSV,每行代表一个 tag(可以是包含别名的老式无表头 CSV):
tag— 标签本身,使用下划线格式(例如:long_hair、1girl)。category— Danbooru 分类编号,重要:0=general,1=artist,3=copyright,4=character,5=meta。post_count— 在 Danbooru 上的出现次数(用于强度过滤与排序)。aliases— 用|分隔的别名(可为空)。is_locked— 管理员锁定标记(0/1,可忽略)。antecedent_alias— 如果当前行为别名,该列为主标签;否则为空。
注意:本仓库包含大量真实标签示例(请勿让工具在内存中一次性加载整个大表以避免性能/内存问题)。开发中间件与前端组件已设计为只读取文件内容并按需分页渲染,但如果你有百万级别的行,请在将文件放入 tags/ 前先对其进行裁剪或分割。
UI 使用说明(简要)
- 标签列表:搜索 / 筛选(按
post_count与 alias)并分页显示。 - 选择:点击标签将其加入右侧“已选标签”面板,不同 Tab(通用/画师/角色)之间切换不会清空已选项。
- 已选项:可为单个标签设置权重(默认 1,步进 0.1)、切换符号类型
()或{}、增加/减少符号层级、拖拽重排、删除。 - 复制:点击复制按钮将按当前顺序生成带符号和权重的文本并写入剪贴板(权重为 1 时省略
:1),UI 会短暂显示 “已复制” 提示。
开发者说明
- 中间件实现位于
vite.config.ts(开发环境),提供/tags/_list与/tags/<file>.csv。这仅在npm run dev时生效。 - 前端 CSV 解析使用
PapaParse(已包含在依赖中),并支持有表头和无表头两种情况。
示例文件
- 项目自带一些示例 CSV 存放在
public/tags/,public/tags/list.json列出了可用示例。
常见问题
- Q: 我把 CSV 放到
tags/里但前端没有列出它们? A: 请确认 CSV 行至少包含tag,category,post_count三列,且category与post_count能解析为数字。开发中间件会尝试判定但不会深度校验整个大文件的每一行。
下一步 / 贡献
- 若你希望我把你的无表头大表自动转换为带完整表头的 CSV(不修改原文件,生成到
public/tags/),我可以帮你批量生成一个带表头的副本并更新public/tags/list.json。
License
- 本项目为个人/内部工具演示,未附加特定开源许可证(如需许可证请告诉我)。
联系方式
- 在仓库中直接编辑/提交 issue,或通过当前会话告诉我接下来要我做的事。