2025年2月2日-qt程序

做了什么

试着添加了websocket适配,现在可以切换http和websocket。

优化了图片查看器。

感想

comfyui的api和我理解的不一样,我以为是有两套,一套http,一套websocket,实际上只有一套。传递大部分信息都是http,实时获取队列状态(以及一些插件,例如服务器状态实时监控)是走websocket。看了一圈,没有一个api是纯走websocket的(也没有必要都走websocket…)。

comfyui的api需要自定义工作流所有东西,这点有点麻烦。我希望的是有一个简洁明了的、效果足够好的、直接返回图片的接口。可配置项都用默认配置。

CheckpointLoaderSimple节点的模型需要自定义,万一服务器没有某个模型的话,有点难办,因为模型的效果我不知道。命名也可能不标准。

之后的工作

1、comfyui api 适配

现在的想法是提供一个简单但是有效的默认配置文件,单独拎出来,不要和其他api的放在一起。其中可以有一个简单的工作流,连接已经固定,只能修改其中参数。节点:

  1. 一个lora节点
  2. 一个遮罩节点
  3. 两个文本节点,即prompt 和 negative prompt
  4. 模型节点
  5. 尺寸,批次大小,即EmptyLatentImage
  6. 采样器节点,KSampler,可以配置采样器种类、种子、步数
  7. 一个上传图片、图生图的节点
  8. 其他不可配置的节点

应当通过一个单独的窗口提供可配置选项:

  1. lora名称选择
  2. 遮罩
    • 是否有遮罩
    • 遮罩图片上传
  3. 文本通过共用的TextEdit进行设置
  4. 模型选择
  5. 尺寸,批次大小
  6. 采样器种类、种子、步数
    • 种子应当可以设置为随机
    • 步数应当是一个滑动条
  7. 应当可以配置是文生图还是图生图
    • 或者直接根据是否有参考图判断是文生图还是图生图

2、请求历史

应当有一个请求历史记录列表,数据存放在output文件夹的文件中。

应当可以通过一个独立的窗口查看请求历史,并打开对应的图片、查看对应的prompt。

问题在于要如何保证请求和output文件夹中文件的一一对应。假设存储历史请求的文件不会被修改,但是可能被删除,且output中的文件可能被修改。

初步想法是通过json保存请求数据及prompt、文件名,若文件不存在则不显示且提示文件已被移除,若存在则打开。

也可以以请求为一条记录,放在数据库中。

3、图片窗口改进

目前已经实现:

  1. 拖拽
  2. 滚动移动
  3. ctrl+滚动:缩放,且以鼠标为中心
  4. ctrl+0:查看全图
  5. ctrl+1:恢复默认大小
  6. 右键菜单:复制、打开路径、另存为

需要实现:

  1. 空格:关闭窗口
  2. 将以往的图片窗口合并,便于在程序中查看,而不是需要转到文件资源管理器里看。
    • 例如,左边一个侧栏,显示缩略图,page up和page down移动选择,选中的图片将会在右边的label中显示。
    • 可能的问题:内存占用过大
      • 可能的解决方法:程序只加载缩略图和部分图片,切换图片时从硬盘实时读取
        • 需要在内存中保存图片名称和缩略图
        • 图片有一个生存期,一定时间后会释放该图片所占用内存。
        • 有一个最大内存占用,占用过大的时候会按时间倒序释放内存。
        • 这两项可以被配置
        • 切换到一张图片的时候,将会直接放大缩略图,显示在label中。从本地读取完成之后用读到的高清图覆盖,否则提示文件不存在。
      • 可能的问题:卡顿
        • 因为和硬盘交互再写入内存慢于直接从内存加载
        • 而且缩略图制作需要时间
        • 为此,可能需要多线程
        • 但是多线程会占用更多资源
    • 或许可以将其和历史记录查看器合并
      • 分为:本次画图 和 此前的画图
      • 在内存中载入:
        • 缩略图
        • 图片名称
        • prompt
      • 在本地保存:
        • 图片名称
        • prompt
      • “此前的画图” 启动时加载:
        • 本地文件
        • 对应的图片,用于计算得到缩略图,计算完成后释放
          • 可能占用很多资源
      • “本次画图” 启动时不加载任何东西,在收到响应的时候才加载缩略图,并自动保存请求到本地

4、本地数据使用数据库管理

大部分数据库,包括sqlite,可以保存blob数据,也就是说可以保存图片及其缩略图。且不会像文件一样被轻易修改。

这意味着可以把图片和文本数据(例如请求时间,prompt)统一管理。

程序中需要有批量导出、删除图片数据的功能。

但是配置文件应当是一个可以方便地修改的文件。

计划

  1. 先实现comfyui api适配
  2. 数据统一使用数据库保存
  3. 增加历史请求查看功能

2025年2月2日-qt程序
http://blog.wspdwzh.space/2025/02/02/2025年2月2日-qt程序/
作者
peter?
发布于
2025年2月2日
许可协议