TagConverter 是一个功能强大的图像生成标签(Prompt)管理与转换工具,专为 AI 绘画爱好者设计。它提供了标签格式转换、AI 智能优化、图片元数据提取等核心功能,帮助用户更高效地管理和复用提示词。
- 多模式支持:支持 NovelAI (NAI) 与 Stable Diffusion (SD) 格式的相互转换。
- 权重处理:
- 支持括号权重
{{tag}}/[[tag]]与浮点权重(tag:1.1)的互转。 - 提供“精确权重转换”模式。
- 可限制权重的最大值(如限制在 1.6 以内)。
- 支持括号权重
- 智能清洗:
- 自动将中文逗号转换为英文逗号。
- 移除中文标签、Artist 标签。
- 压缩多余空行、删除短行。
- 拆分复合标签、替换下划线为空格。
- 集成 LLM API,对提示词进行深度优化。
- 支持“整块”或“逐行”优化模式。
- 内置系统提示词,支持自定义 Prompt 以适应不同模型风格。
- 可选“移除角色头部特征”功能。
- 拖拽识别:直接将生成的图片(PNG)拖入软件,即可查看完整的元数据信息。
- AI 关键参数识别:
- 针对 ComfyUI 等复杂工作流生成的图片,利用 AI 智能提取关键参数。
- 自动提取内容:
- Checkpoint: 模型名称及哈希。
- LoRA: 自动识别并分组展示所有 LoRA 模型及其权重。
- Prompt: 分离正面与负面提示词,支持一键复制。
- Sampling: 提取 Seed, Steps, CFG, Sampler, Scheduler 等采样参数。
- 自定义提取逻辑:开放“参数提取系统提示词”,用户可根据特定元数据格式调整提取规则。
- 无边框窗口:采用现代化的无边框设计,支持圆角与半透明背景。
- 暗色主题:深色护眼界面,符合设计师使用习惯。
- 灵活布局:
- 侧边栏可折叠、可调节宽度。
- 参数展示区域支持分组折叠与排序。
- 自定义 API 设置面板。
下载Release的新版本打开即用Releases · MikumikuDAIFans/TagConverter
- Python 3.10+
- 依赖库:
PySide6,requests,Pillow等 (详见代码引用)
-
克隆或下载本项目到本地。
-
安装依赖:
pip install PySide6 requests Pillow
-
运行主程序:
python main.py
点击侧边栏顶部的 ⚙ (设置) 按钮,配置 LLM API 信息:
- API Key: 您的 API 密钥。
- API URL: 接口地址 (例如
https://api.siliconflow.cn/chat/completions)。 - Model: 使用的模型名称 (例如
Qwen/Qwen2.5-7B-Instruct)。
配置将自动保存至 user_config.json。
main.py: 程序入口。ui/: 界面代码,包含主窗口 (main_window.py) 和自定义组件 (widgets.py)。core/: 核心逻辑,包含 API 处理 (api_processor.py) 和标签转换算法。controller/: 业务逻辑控制与线程管理。utils/: 工具函数。
本项目是一个基于 Python 和 PySide6 开发的 GUI 应用程序,主要用于 AI 绘画提示词(Tags)的格式转换与处理。核心功能是在 NovelAI(NAI)格式和 Stable Diffusion(SD)格式之间进行标签权重的转换,并提供了一系列文本清洗、过滤和格式化的工具。
项目经过重构,采用了模块化的 MVC(Model-View-Controller)分层架构,提高了代码的可维护性和扩展性。
重构后的项目结构如下:
tagc_updata/
├── main.py # 程序启动入口
├── ui/ # 前端界面层 (View)
│ ├── main_window.py # 主窗口 UI 逻辑
│ └── widgets.py # 自定义 UI 组件
├── controller/ # 业务控制层 (Controller)
│ └── app_controller.py # 异步任务处理与调度
├── core/ # 核心模型层 (Model/Core)
│ └── tag_converter.py # 标签转换算法实现
├── utils/ # 通用工具层 (Utils)
│ └── image_utils.py # 图片元数据提取工具
└── archive/ # 旧版本文件归档
作用:应用程序的唯一入口点。
逻辑:初始化 QApplication,实例化主窗口 TagConverterApp 并启动事件循环。
该模块负责所有图形界面的展示和交互逻辑。
ui/main_window.py- 类:
TagConverterApp(QMainWindow) - 作用:主窗口类,负责界面的布局初始化、样式设置(CSS)、事件绑定(Signal/Slot)以及窗口生命周期管理。它不包含复杂的业务逻辑,而是将耗时操作委托给 Controller 层。
- 类:
ui/widgets.py- 类:
DragDropBox(QWidget) - 作用:自定义的拖拽区域控件。
- 核心功能:实现了文件拖拽事件(
dragEnterEvent,dropEvent),支持识别文本文件和 PNG 图片。对于 PNG 图片,它调用utils.image_utils提取生成信息。
- 类:
该模块充当 UI 和 Core 之间的桥梁,处理后台任务。
controller/app_controller.py- 类:
ProcessingThread(QThread) - 作用:工作线程类,负责在后台执行耗时的标签转换任务,避免阻塞 UI 主线程。
- 逻辑:接收 UI 传递的参数(文本、模式、选项),调用
core.tag_converter进行处理,并通过信号finished或error_occurred将结果返回给 UI。
- 类:
该模块包含项目核心的业务算法,纯 Python 实现,不依赖 UI 库。
core/tag_converter.py- 函数:
process_tags - 作用:统一的标签处理入口。
- 核心算法:
- NAI ↔ SD 权重转换:
- SD 转 NAI (
convert_sd_to_nai):利用正则提取(tag:weight),根据权重值生成对应层数的{tag}或[tag]。 - NAI 转 SD (
convert_nai_to_sd):解析1.2::tag或{{tag}}格式,计算对应的浮点权重。
- SD 转 NAI (
- 文本清洗 (
apply_optional_filters):包含中文符号转英文、去除中文、压缩空行、去除artist标签等一系列正则替换规则。
- NAI ↔ SD 权重转换:
- 函数:
提供通用的辅助功能。
utils/image_utils.py- 函数:
extract_png_text_chunks - 作用:从 PNG 图片中提取元数据。
- 原理:直接解析 PNG 二进制文件结构,读取
tEXt和iTXt数据块,获取 AI 生成参数(Prompt、Seed 等),无需加载整个图像数据,效率极高。
- 函数:
重构后的架构遵循了 关注点分离 的原则:
- View (ui/):只负责“怎么显示”和“响应用户操作”。
- Controller (controller/):负责“怎么调度”,协调 UI 和后台算法。
- Model/Core (core/):负责“怎么计算”,实现了核心的业务逻辑,且完全独立于 UI,易于测试和复用。
- Utils (utils/):负责提供独立的基础服务。
这种架构使得代码结构清晰,各个模块职责分明,极大地降低了耦合度,为后续的功能扩展(如添加新的转换算法或更改 UI 框架)奠定了良好的基础。
