Skip to content

About

Nai3 to SD TagConverter

Resources

Stars

3 stars

Watchers

1 watching

Forks

Repository files navigation

TagConverter (Tag转换器)

TagConverter 是一个功能强大的图像生成标签(Prompt)管理与转换工具,专为 AI 绘画爱好者设计。它提供了标签格式转换、AI 智能优化、图片元数据提取等核心功能,帮助用户更高效地管理和复用提示词。

UI Preview

核心功能

1. 标签格式转换 (Tag Conversion)

  • 多模式支持:支持 NovelAI (NAI) 与 Stable Diffusion (SD) 格式的相互转换。
  • 权重处理:
    • 支持括号权重 {{tag}} / [[tag]] 与浮点权重 (tag:1.1) 的互转。
    • 提供“精确权重转换”模式。
    • 可限制权重的最大值(如限制在 1.6 以内)。
  • 智能清洗:
    • 自动将中文逗号转换为英文逗号。
    • 移除中文标签、Artist 标签。
    • 压缩多余空行、删除短行。
    • 拆分复合标签、替换下划线为空格。

2. AI 智能优化 (AI Tag Optimization)

  • 集成 LLM API,对提示词进行深度优化。
  • 支持“整块”或“逐行”优化模式。
  • 内置系统提示词,支持自定义 Prompt 以适应不同模型风格。
  • 可选“移除角色头部特征”功能。

3. 图片元数据提取 (Image Metadata Extraction)

  • 拖拽识别:直接将生成的图片(PNG)拖入软件,即可查看完整的元数据信息。
  • AI 关键参数识别:
    • 针对 ComfyUI 等复杂工作流生成的图片,利用 AI 智能提取关键参数。
    • 自动提取内容:
      • Checkpoint: 模型名称及哈希。
      • LoRA: 自动识别并分组展示所有 LoRA 模型及其权重。
      • Prompt: 分离正面与负面提示词,支持一键复制。
      • Sampling: 提取 Seed, Steps, CFG, Sampler, Scheduler 等采样参数。
    • 自定义提取逻辑:开放“参数提取系统提示词”,用户可根据特定元数据格式调整提取规则。

4. 现代化 UI 设计

  • 无边框窗口:采用现代化的无边框设计,支持圆角与半透明背景。
  • 暗色主题:深色护眼界面,符合设计师使用习惯。
  • 灵活布局:
    • 侧边栏可折叠、可调节宽度。
    • 参数展示区域支持分组折叠与排序。
    • 自定义 API 设置面板。

image-20260125160238096

对于用户

下载Release的新版本打开即用Releases · MikumikuDAIFans/TagConverter

对于开发者的安装与运行

环境要求

  • Python 3.10+
  • 依赖库:PySide6, requests, Pillow 等 (详见代码引用)

运行方法

  1. 克隆或下载本项目到本地。

  2. 安装依赖:

    pip install PySide6 requests Pillow
  3. 运行主程序:

    python main.py

API 配置

点击侧边栏顶部的 ⚙ (设置) 按钮,配置 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/: 工具函数。

TagConverter 项目代码分析报告

1. 项目概览

本项目是一个基于 Python 和 PySide6 开发的 GUI 应用程序,主要用于 AI 绘画提示词(Tags)的格式转换与处理。核心功能是在 NovelAI(NAI)格式和 Stable Diffusion(SD)格式之间进行标签权重的转换,并提供了一系列文本清洗、过滤和格式化的工具。

项目经过重构,采用了模块化的 MVC(Model-View-Controller)分层架构,提高了代码的可维护性和扩展性。

2. 项目架构与模块划分

重构后的项目结构如下:

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/                 # 旧版本文件归档

3. 核心文件详细分析

3.1 程序入口:main.py

作用:应用程序的唯一入口点。 逻辑:初始化 QApplication,实例化主窗口 TagConverterApp 并启动事件循环。

3.2 界面层 (UI):ui/

该模块负责所有图形界面的展示和交互逻辑。

  • ui/main_window.py
    • 类:TagConverterApp(QMainWindow)
    • 作用:主窗口类,负责界面的布局初始化、样式设置(CSS)、事件绑定(Signal/Slot)以及窗口生命周期管理。它不包含复杂的业务逻辑,而是将耗时操作委托给 Controller 层。
  • ui/widgets.py
    • 类:DragDropBox(QWidget)
    • 作用:自定义的拖拽区域控件。
    • 核心功能:实现了文件拖拽事件(dragEnterEvent, dropEvent),支持识别文本文件和 PNG 图片。对于 PNG 图片,它调用 utils.image_utils 提取生成信息。

3.3 控制层 (Controller):controller/

该模块充当 UI 和 Core 之间的桥梁,处理后台任务。

  • controller/app_controller.py
    • 类:ProcessingThread(QThread)
    • 作用:工作线程类,负责在后台执行耗时的标签转换任务,避免阻塞 UI 主线程。
    • 逻辑:接收 UI 传递的参数(文本、模式、选项),调用 core.tag_converter 进行处理,并通过信号 finished 或 error_occurred 将结果返回给 UI。

3.4 核心层 (Core):core/

该模块包含项目核心的业务算法,纯 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}} 格式,计算对应的浮点权重。
      • 文本清洗 (apply_optional_filters):包含中文符号转英文、去除中文、压缩空行、去除 artist 标签等一系列正则替换规则。

3.5 工具层 (Utils):utils/

提供通用的辅助功能。

  • utils/image_utils.py
    • 函数:extract_png_text_chunks
    • 作用:从 PNG 图片中提取元数据。
    • 原理:直接解析 PNG 二进制文件结构,读取 tEXt 和 iTXt 数据块,获取 AI 生成参数(Prompt、Seed 等),无需加载整个图像数据,效率极高。

4. 架构总结

重构后的架构遵循了 关注点分离 的原则:

  1. View (ui/):只负责“怎么显示”和“响应用户操作”。
  2. Controller (controller/):负责“怎么调度”,协调 UI 和后台算法。
  3. Model/Core (core/):负责“怎么计算”,实现了核心的业务逻辑,且完全独立于 UI,易于测试和复用。
  4. Utils (utils/):负责提供独立的基础服务。

这种架构使得代码结构清晰,各个模块职责分明,极大地降低了耦合度,为后续的功能扩展(如添加新的转换算法或更改 UI 框架)奠定了良好的基础。

About

Nai3 to SD TagConverter

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages