Skip to content

Releases: 1756141021/HainTag

v0.9.9

04 May 15:24

Choose a tag to compare

Fixed

  • 历史记录 token 数为零 — 开始新一次生成时 \clear_output()\ 会触发 _persist_current_history_output\,此时 editor 刚清空但 worker 尚未启动(guard 失效),导致上一条历史记录被空字符串覆盖。现在加一条守卫:若新文本为空而旧条目已有内容,直接跳过,不覆盖。

HainTag v0.9.8

04 May 14:02

Choose a tag to compare

Fixed

  • 例图无限增殖 — 全局上次目录被污染成 examples_dir 后,例图选择器落在 examples 里,用户选已有 UUID 文件会触发 copy_example_image 制造副本。现在 _select_image 检测文件是否已在 examples_dir,若是则直接复用路径,不再复制
  • 自动更新报「没有 exe 文件」 — ZIP 校验仅接受 HainTag/HainTag.exe 子目录结构,flat 打包直接失败。放宽为任意路径下存在 haintag.exe 即通过;_apply_update 自动探测 ZIP 结构;清理升级为清理整个 temp 目录
  • 例图 tags 照搬到输出 — 例图作为 assistant message 发给 AI,AI 把整个 tag 列表(含 lora 引用)原封不动复读到输出。现在过滤 lora token,并在格式里加明确约束「禁止照搬,须根据当前描述重新生成」

HainTag v0.9.7

03 May 08:52

Choose a tag to compare

Added

  • TAG 补全支持中文查询 — `search_prefix` 检测 CJK 字符后走 substring 匹配 `translation` 字段,输入「女孩」能弹出 `1girl` / `multiple_girls` 等候选;ASCII 输入仍走原 prefix 匹配 `name` + `aliases`
  • 补全 token 切分识别中文逗号 — `_do_complete` 现在同时按 `,` 和 `,` 切 token,CJK 输入法用户写「女孩,猫耳」不会让整段当一个 token

Fixed

  • 图片选择对话框默认目录共享 — 例图卡 / OC 库参考图 / metadata 销毁器 / metadata 查看器以前都用 `""` 当起点,每次都掉到进程 cwd。新增 `file_dialogs.pick_image_file/pick_image_files` 帮手共享一个「上次图片目录」缓存,启动时从 `image_manager_folder` 注入,picking 后自动更新

HainTag v0.9.6

02 May 12:48

Choose a tag to compare

Fixed

  • TAG 补全弹窗多开重叠 — 主工作台 editor 和其它卡片输入框各自挂了独立 `TagCompleterPopup`,A 焦点离开时 200ms 延迟 hide 还没触发,B 已经 show 出来,两个弹窗同时可见。改为类级 `_active_popup` 单例:新 popup 调 `show_suggestions` 前先 hide 上一个,`hideEvent` 里清引用,全局只有一个补全窗可见

HainTag v0.9.5

02 May 09:40

Choose a tag to compare

Added

  • TAG 补全全局覆盖 — 所有可编辑文本控件(QTextEdit / QPlainTextEdit / QLineEdit)默认挂上 Danbooru TAG 补全。覆盖到主输入、完整 / 无角色 TAG editor、例图 tags / 描述、Artist 名 / 触发词、OC 名 / tags / 服装、LLM 反推预设、设置面板各字段、prompt manager、销毁模板、metadata 销毁器(含动态 LoRA 行)、图像管理器搜索 / 重命名等
  • 工作台 chip 视图新增「✏ 编辑」按钮 — copy bar 左端显式切换 chip / editor 视图,编辑态下 TAG 补全直接可用;流式生成期间强制 editor,结束后回到用户选择的视图
  • TagCompletionHost 协议接口 — 各 panel 实现 `set_tag_dictionary(d)`,window 启动时统一通过 `_dispatch_tag_dictionary()` 注入;新加的 panel 只要实现协议即可即插即用,window.py 无需逐个挂

Changed

  • `tag_completer` 通用化 — `install_completer` 同时支持 QTextEdit、QPlainTextEdit、QLineEdit,新增 `install_completer_recursive(root, dict)` 一次性走树挂载。过滤只读 / 密码 / 显式 `noTagCompleter=True` 的控件;幂等,重复调用安全
  • 动态生成的子节点也参与覆盖 — `LibraryPanel._add_artist/_add_oc`、`OCBanner._add_outfit`、`MetadataDestroyer._add_lora_row`、`PromptManagerWidget._on_rows_inserted`、`ExampleWidget` 卡片新增时都会再调一次 recursive 把新控件接入

Fixed

  • completer 延迟回调访问已销毁对象崩溃 — `_focus_out` 200ms 延迟、`_check_active` 500ms 轮询、textChanged 150ms 防抖三条 timer 路径都可能在 dialog / 卡片销毁后触发,原代码裸调 `popup.hide()` / `edit.hasFocus()` 抛 `RuntimeError`。统一改走 `_safe_hide_popup` + `_popup_alive` 守卫(先 `sip.isdeleted` 再 `RuntimeError` 兜底),`_pick_info` / `_insert_tag` 也加 `_target_edit` 删除检查

HainTag v0.9.4

02 May 08:39

Choose a tag to compare

Fixed

  • 流式生成卡死 / 输出区缩成一团 — 流式模式下,模型 reasoning 和正文 token 每次追加都会触发 _TagStreamView.refresh(),整批 chip 反复 deleteLater + 重建 + setStyleSheet,长输出(DeepSeek V4 Pro 等)下主线程被打满,最后 apply_post_processing 一刀又把 chip 全砸进 FlowLayout,inner 塌成一个 chip 大小。现在流式期间 chip 流暂停渲染、直接显示 editor 文本,完成后一次性建 chip
  • `_FlowLayout.sizeHint` 返回单 chip 尺寸 — 改为按内容宽度跑一次 `_do_layout` 拿真实累加高度,`adjustSize()` 不再把 inner 缩塌
  • 生成完成后状态栏卡在「生成中」 — `_on_worker_finished` 漏掉了 `set_generation_status("done")`,现在补上,错误 / 取消路径也一起清流式标记

HainTag v0.9.3

02 May 05:29

Choose a tag to compare

修复

  • 存放台只在工作区外触发 — 卡片在工作区(应用窗口)内拖拽永不触发存放台;只有 _floating=True(已浮出为独立顶层窗口)的卡片才能形成 / 加入存放台
  • settings.json 保存抗锁os.replace 原子保存遇 Windows AV / OneDrive / 杀软扫描临时锁文件不再直接崩溃,新增三档退避重试(50ms / 150ms / 400ms),失败时回退直写保数据

改动

  • 浮出卡片默认非顶置WidgetCard.float_out 不再默认置顶,去掉 Qt.WindowStaysOnTopHint_pinned 默认 False;要顶置手动点针。这样从存放台拖出的卡片、新浮出的卡片都不会强行覆盖其它窗口
  • WidgetCard.set_pinned(bool) 公开接口 — 给外部按需置位 / 复位顶置状态用

下载 HainTag-v0.9.3.zip,解压后运行 HainTag.exe

HainTag v0.9.2

01 May 16:47

Choose a tag to compare

修复

  • Prompt 顺序与深度语义 — 还原 SillyTavern 风格:depth=0 落在用户输入之后(最末端,约束力最强),depth>0 从末尾倒数 N 条插入;超出聊天范围的大 depth 自动溢出到历史之上作为 system 块,历史本身永不被切开
  • 存放台主工作区限定 — 存放台只对已 floated-out 的卡片生效,主工作区内拖拽不再触发存放台;主工作台 widget-main 加入受保护集合,永不进入存放台
  • 存放台位置_tray_anchor_point 改写,存放台必落在主工作台之外(优先右侧、再左侧、兜底屏幕右沿)
  • 侧栏开启崩溃card.is_floating() 三处误把 @property 当方法调用导致 TypeError: 'bool' object is not callable,统一改为属性访问
  • i18n 文案tip_depth 恢复 v0.7.1 措辞(消息条数语义),default_example_order / default_oc_order 中文从「权重」改回「顺序」

改动

  • TagDictionary 懒加载 — 5.9 MB CSV 改为首次 lookup / search_prefix 时触发解析,启动期省 ~500 ms;queue_csv() 排队、_ensure_loaded() 自动加载
  • 例图默认 orderdefault_example_order 由 100 调整为 50,新建例图自动落在「例图参考开始/结束」标记区间内
  • 打包瘦身 — spec 排除未用 PyQt6 子模块(QtQml / QtWebEngine / QtMultimedia / QtCharts 等)、关闭 UPX 压缩、过滤 50+ 个 Win10+ 系统自带的 api-ms-win-* 转发 DLL,dist 体积更干净,冷启动 DLL 解压开销降低

下载 HainTag-v0.9.2.zip,解压后运行 HainTag.exe

HainTag v0.9.1

01 May 06:01

Choose a tag to compare

HainTag v0.9.1

Highlights

  • Main workbench v3: editable TAG stream, hover hints, category-colored chips, left-drag reorder, right-drag weight scrubbing, and Full / No-Character TAG tabs.
  • OC titlebar shortcuts: in-place add menu, quick outfit / Order / Depth controls, right-click remove / edit / open library actions.
  • History timeline: recent generations are visible in the workbench, with full history restore for input, full TAGs, and no-character TAGs.
  • Localized context menus: input, output, library, history, Dock, and floating tray menus now follow i18n, theme, font, and scaling interfaces.
  • Image interrogation refresh: Local / LLM modes share one card-level switch while keeping batch images, presets, thresholds, category colors, and copy/send actions.
  • Floating tray behavior: cards can collapse into a compact tray, and the tray hides automatically when only one member remains.
  • Update flow hardening: ZIP download, validation, extraction, missing-exe checks, and localized failure messages.

Package

  • Asset: HainTag-v0.9.1-windows.zip
  • SHA256: 8CDBD781A5E39AEB3FF869CA6885F0004EC996112D859E86C3F50C13F07D6FEC

See CHANGELOG.md for the full release notes.

v0.7.1 — 图像反推增强 + DLL 冲突修复

08 Apr 15:28

Choose a tag to compare

新增

  • 自动配置 Python 环境 — 当 onnxruntime 无法加载时,一键下载 Python 3.12 嵌入式包 + 依赖到 AppData,无需手动安装或拥有 ComfyUI
  • 置信度显示开关 — 推理结果支持一键切换显示/隐藏置信度百分比
  • 手动选择 Python 路径 — 设置页新增手动选择按钮,可指定 ComfyUI 等已有 Python
  • "开始使用"按钮 — 手动配置模型和 Python 后,需点击确认才切换到推理页面

修复

  • DLL 冲突(重要) — 从打包中移除 onnxruntime,避免 dist 内的 Python 3.14 版 DLL 与外部 Python 的 onnxruntime 冲突导致初始化失败
  • 子进程环境隔离 — 清理 PyInstaller 注入的环境变量和 PATH,防止污染外部 Python
  • tag 映射兼容 — 修复 dict 格式 tag_mapping.json 读取 key 而非 tag name,修复类别大小写不匹配
  • 启动字体 — 修复启动时字体/字号设置未生效的问题
  • 主题/字号响应 — 图像反推组件所有样式改用 _fs() 接口,字体大小切换全局生效
  • 模型目录扫描 — 支持任意 .onnx 文件名,兼容 ComfyUI 等第三方目录结构
  • Python 路径持久化 — 重启后自动恢复外部 Python 路径

完整 Changelog

详见 CHANGELOG.md