Skip to content

Mosael v1.9.9

Choose a tag to compare

@Alndaly Alndaly released this 19 Oct 16:55
· 194 commits to main since this release

Mosael v1.9.9

ComfyUI:目录类输出预算放宽到 8 MB,插件不再静默削模型清单(插件 1.23.5)

  • 维护者那台大 ComfyUI 刷新工具清单时只得到一句「插件输出超过大小限制 (1MB)」:目录类操作(工具、模型、工作流库、
    节点包、音色)的输出会随机器内容线性变大,1 MB 的预算在几百张工作流的机器上必然撞线。现在这些目录 op 单独用
    8 MB 预算(CATALOG_OUTPUT_BYTES),普通工具调用仍守 1 MB;超限时整份不收、不截断,文案带上工具名(含 op)、
    上限、实际读到多少和下一步(到插件页刷新;还不行就减少服务器上的模型 / 工作流数量,或者升级 Mosael)。
  • 插件侧不再自己先削模型清单。 随包 ComfyUI 插件的 library.py 原先把模型清单削到 900 KB,并显示「只列出了前 N 个」
    —— 宿主那道闸永远看不到真实大小,用户会以为模型就这么多。现在插件侧预算抬到 8 MB,删掉 80% 递归截断和那句提示;
    真超过 8 MB 由宿主整份拒收并说清。1500 个长名模型从「768/1500 + 只列出了前 768 个」变成 1500/1500;
    8000 个(插件输出约 13 MB)会被宿主整份拒收,报「超过 8.0 MB 的上限(实际已读到 13 MB)」。
  • 插件版本 1.23.5(mosael.plugin.json 只动 version,插件市场索引机械重生成)。工作流库左栏也顺手改宽到 240、
    不再横滚、分组可展开收拢、长名字省略并给 Hint;「在哪跑」三格均分,「共用的模型文件夹」输入框吃满剩余宽度,
    「用到的模型」每行不再留一段没用的空白。
  • 你要做什么: 不用做。若升级后仍报超限,先到插件页点刷新;还不行就把插件包更新到 1.23.5。

模型下载:断点续传,取消 / 失败保留半截,刷新页面也不丢

  • ComfyUI 的模型下载支持断点续传:请求带 Range + If-Range,正确处理 206 / 200 / 416;续传前用 sidecar
    (<name>.mosael-part.json:url、本轮声明的 SHA256、总大小、ETag / Last-Modified)对账 —— 地址、哈希、总大小、
    校验器任一不符就删掉半截从头下,绝不硬拼;服务端不支持 Range 返回 200 时从 0 重写,绝不接在半截后面。
  • 取消或失败不再删半截,下次下载给「从 N 继续」和「删除没下完的部分」两个动作;7 天没再动的孤儿
    (PART_MAX_AGE_DAYS)在下一次本机下载开始或查看半截时清理,不另起定时任务,这一次要续的那份不算孤儿。
  • 进度、百分比和速度改成结构化的字节数:downloaded_bytes / total_bytes(总量未知就是 null,不是 0)/
    speed_bps;界面只读这些字段,百分比按字节算,不再去解析任何人话。续传第一条事件就从已下载的字节开始,
    并说「从已下载的 X 继续」。
  • 刷新页面后状态不丢、还能继续:下载状态从后端任务列表派生,界面里不再存 jobId / attempt;刷新之后一条
    已取消、还留着半截的任务照样能「从 N 继续」,也能取消和看字节 / 速度。经 ComfyUI-Manager 的路线没有本地半截,
    所以不给「继续 / 删除」。
  • 你要做什么: 不用做。没下完的会留着,下次接着下;确实不想要了再点「删除没下完的部分」。

远端连接:「打开工作台」不再依赖整份工作流库,连接卡显示版本号

  • 「打开工作台」入口的显示条件原先要等整份工作流库读回来 —— 远端那台的 workflows 输出一超限,整份报错,
    这颗按钮就根本不渲染(不是禁用、不是权限、不是只给本机)。现在工作流库读不回来时,地址退回连接自己写的
    server_url(实测插件报的 editor.url 与它是同一个值,不是猜);桌面壳没有内嵌工作台时,网页版也能用
    window.open 在新标签页打开;一个地址都拿不到时入口照样摆着,但点不动、悬停说清为什么。
  • 连接卡显示远端版本号。 后端早就覆盖远端探测,缺的是前端接线:server 模式的连接卡现在在「服务器地址」后面
    摆版本行(只在展开时挂载,不展开不探测),四种情况各说一句 —— 读到版本、连不上(没应答)、在跑但没报版本
    (不猜一个)、连接里没有可问的地址。插件详情页也能看到 ComfyUI 的版本;查不到上游最新时只说查不到,
    只有确认当前版本就是上游最新才出现「已经是最新的」。
  • 你要做什么: 不用做;展开连接时才会去问那一台的版本。

ComfyUI「缺失项」:12 条修复,先说真话、不丢数据、不诱导用户做错事

  • 离线也能按图上自己写的 cnr_id / aux_id / ver 归因:库、导入、缺失项都先信工作流的声明,Manager 映射只补
    没声明的;包行带来源、页面、仓库、想要的版本、已装版本、是否启用、状态,宿主全量透传。此前没有 Manager 就
    「不知道是哪个节点包」,与官网承诺相反。
  • 「没搜成」不再冒充「对不上」:0 个候选且下载站失败时说「站都没答上来,没法核对」,有候选才说对不上;
    并区分「工作流声明的哈希」与「机器算出的哈希」。
  • models[] 没写 directory 不丢:按用到它的节点输入名补目录、再按 options 补,补不出就保留空目录并明说
    「不知道放哪个目录」,模型库那边同名在任一目录即算在。
  • 版本不符说清楚:semver 比较出升级 / 降级 / 同一版,文案说「要 X、装 Y,需升级 / 降级」,安装时把 ver 交给
    Manager;git commit 标 unknown、没写标 latest,都明说。comfy-core 是「ComfyUI 太老,要升级」,不是「装节点包」。
  • 只写 aux_id 的包装着也认(目录名 / cnr_id / 完整 aux_id / 仓库短名);同名 basename 不再冒充同一个文件,
    只说「有一个同名文件」+ 路径 / 大小,有声明哈希且能算才说「就是 / 不是同一个文件」。
  • 校验错误主句改成人话(翻 Value not in list / Node not found / Required input is missing,带节点号),
    原话进 detail;顶部 problem 按包状态分支(没装的去装、全装了看启用 / 加载、没 Manager 就说不知道、认不出就去搜);
    包行带上「装了但被禁用」与「装了没加载」的区别;工作台缺东西不再静默 —— MissingPanel 始终挂载,标签上给数字徽标。
  • 缺的模型显示真实下载地址(下方一整行,可点、可复制,不再靠会朝左弹的浮层);多平台来源只在能确认时给:
    工作流声明 64 位 SHA256 时去 HF / Civitai / ModelScope 核对元数据,只有 confirmed 且 direct、界面再核对一次
    哈希对得上、并且是本机下载路线才列出;没声明哈希就一次都不查,离线整块不渲染。按声明的 SHA256 下载并核对:
    本机路线边下边算,对不上就删 .part 并说清「已删掉,没放进目录」;经 Manager 的路线核对不了,带哈希时提交前
    直接拒绝并说明原因,界面也明说「核对不了,不能确认是同一个文件」。
  • 你要做什么: 不用做。缺项面板的数字徽标会提示还有几项没解决。

URL 导入:补上三条闸、站点适配器接缝、图片直链与 MissAV

  • 三条闸:文件大小上限 2 GiB(与网页下载同一个常量,进度回调第一次看到总量超限即中止,落地后再量一次兜底)、
    整次下载的 wall-clock 总超时(含重试,用户取消优先)、落地文件头嗅探(HTML 改名成 .mp4 会被删并拒,
    说「不是媒体文件」)。此前这条路上一条闸都没有。
  • resolve() 站点适配器接缝:统一契约 ResolvedMedia{url, headers, title},None 表示不认识 —— 绝不近似;
    探测和下载前各问一次,不认识就退回 yt-dlp,下载仍全部复用同一条下载器。
  • 图片直链导入:素材库原有的「从链接导入」对话框里多一个入口,边走边数 40 MiB、看文件头、入库并记 source_url;
    失败卡也会提示「如果这是图片直链,改用图片直链导入」。
  • MissAV 站点适配:解析 packed 脚本里的 m3u8 地址并登记,格式带 Referer / UA,页面按块读、上限 8 MB,
    解不开的脚本只跳过不吞后面的好块,拿不到就说「解析失败 / 脚本解不开 / 页面太大」,绝不返回近似地址。
    只对实测可用的 missav123.com 与 missav.live 生效;.ai / .ws 是 Cloudflare 的 managed challenge(403),
    连 curl_cffi 也过不去,不认领。
  • 你要做什么: 不用做;导入 MissAV 链接时只支持上面那两个域名。

一致性:AES-128 的 HLS 不再一律标「受保护」,地区受限文案指向真正管用的代理

  • 页面扫描原先把任何非 METHOD=NONE 的 HLS 都判成受保护 —— 同一段视频从链接导入其实能下。现在只有
    METHOD=AES-128 + 标准 identity KEYFORMAT 算「加密但可导入」(导入时自动解密),其余真 DRM(SAMPLE-AES /
    SAMPLE-AES-CTR、FairPlay / Widevine 这类非 identity KEYFORMAT、AES-256、没有 METHOD)仍然拦下;DASH 的
    ContentProtection 不变。
  • 「地区受限」的文案此前让人去配浏览器档案代理,但档案代理只作用于内嵌浏览器,而从链接导入走的是这台机器的
    出站代理。现在文案指向 部署设置 → 出站代理,并说明档案自己的代理只管内嵌浏览器。
  • 你要做什么: 不用做。

剪辑页:灯箱不再多一路声音,字幕翻译不再卡住,动作栏按语义分组

  • 点第一个素材、第二个视频的音频也响:根因不在切源,而在共享灯箱 —— 库会渲染当前项 + 左右各一项,每个相邻
    视频项都挂了一个自动播放的播放器。现在同一时刻只允许一个活动源,相邻视频项留空画框;播放器卸载即暂停并清掉
    src;打开灯箱时暂停灯箱外正在播放的 <video> / <audio>(只暂停不恢复)。
  • 字幕翻译不再「永远 0/1039」且停不下:此前没有连接级超时,Google 逐句串行 0.35 秒、400 条一批光节流就 ≥140 秒,
    连不上还要耗满 60 秒。现在每批 120 秒、整次总 deadline 15 分钟、批大小 400 → 125,后端连接超时收紧到 10 秒
    (真正连不上约 10 秒就报「连不上 Google 免费翻译接口」);翻译中带「取消」,取消后在途批当场停下、后面批次不再发,
    已有批次保留并说清写了多少,不写半份。
  • 字幕 / 逐字稿动作改图标 + Hint:读屏名与悬停名只写一次,禁用时由 Hint 壳接住焦点;口癖、静音的数量留成
    右上角角标;图标按语义分组(生成 / 加工 / 文件 / 设置,逐字稿是识别与清理 / 切分与产出 / 文件),分隔线跟着自己的组
    折行,不会孤零零留在行尾。「字幕样式」改成弹窗,和同排动作同一款按钮,不再是一颗单独的描边药丸;翻译弹层主按钮
    铺满;右侧统计 / 设置钉住不动,左侧动作超出可横向滚,并给裁剪框留 4px 纵向余量(角标与焦点环不再被切掉)。
  • 配音模型下载失败 / 被杀都说原因:状态从后端派生(失败后也继续轮询),正在下载显示进度条 + 字节 + 速度,
    百分比按字节算、总量未知就不定进度并写「大小未知」;失败显示 FailureCard + 后端翻好的原因 + 「最后一次 {时间}」+
    重试;轮询失败说「查不到模型下载状态」并可重试,不再变回「下载这个模型」;应用退出 / 后端重启中断的那次落成
    「上一次下载没有完成」。重试时整条记录换新,旧字节、旧总量、旧原因不残留。
  • 画布 0×0 时的 NaN SVG:修在视口 / 坐标层而不是往 JSX 里塞 || 0 —— 容器宽或高为 0 时不起 d3-zoom 过渡,
    非有限的 x / y 退 0、非有限或非正的 zoom 退 1。真实浏览器里「容器还没挂上、被面板压没、窗口窄到 0」也不再
    往 <pattern> / <circle> 写 NaN。
  • 顺带:剪辑顶栏的项目切换菜单去掉空图标槽、所有项左边缘对齐,「新建项目」进独立底栏不跟列表滚。
  • 你要做什么: 不用做。

智能体:后台任务的回执不再当一条消息常驻,重启中断的那一轮看得到做过哪些步骤

  • 回执按结果分两种。 成功、且被智能体接住的回执折叠进接住它的那一轮的过程步骤(「已处理 · N 步」,
    默认收起;展开是一行「后台任务 · 种类 · 任务名 · 成功 / 失败」,点开是任务详情),不再在对话里单独占一条消息;
    成功的回执也收进右侧「本对话的后台任务」。失败 / 取消的回执仍是显式一张卡:一句人话、原始异常进「详情」,
    带「查看任务 / 前往 / 重新取回」。没被接住的那条不会被折叠掉 —— 成功了却还没交给智能体时有一行兜底提示。
  • 直接由工具发起的任务现在也有回执。 转写、链接导入、镜头拆解这几类任务此前只设了调用身份、没有回执,
    于是不会出现在「本对话的后台任务」里,也不能按对话归属;现在和确认卡那条路同一套机制。
  • 后端重启打断的那一轮不再只剩一句「已中断」。 工具 / 子代理的步骤在跑的时候按快照写进
    agent_turn_events(一行一个事件,不重写整条消息),重启收尾时把最后一版快照写进中断消息 —— 重开看得到
    做到哪一步。这些事件读完即删,另有一条 7 天兜底清理。
  • 「最近 N 轮失败」改成「连续失败 N 轮」,后端重启打断单独累计成一行「后端重启中断 N 次」,不再冒充失败。
  • 「任务计划」和「后台任务」用同一套行语法。 检查器里上下两块并排,每行说的都是同一件事(这一条做到哪了),
    却长得不一样:计划是 状态圈 + 文字,任务多一个类型图标、右侧还再写一遍「成功」。现在两处共用一行 ——
    状态只在左边那一圈(计划说 done / in_progress,任务说 succeeded / cancelled / queued,到这里都归成一个状态),
    主行右侧只放动作(取消、前往结果),进度 / 用时 / 失败原因留在主行下方的说明行、和文字同一左缘;类型图标不再出现。
  • 你要做什么: 不用做。

任务名只说用户要什么:生成任务的 subject 不再拿整段提示词

  • 生成任务的 subject 此前在没写提示词时落的是喂给模型的整段(prompt_for_provider:文档正文、白模说明、
    素材描述),任务卡、任务中心、回执里看到的是一整篇 —— 那不是「用户要什么」。现在写了提示词就存完整原文,
    没写就存空,由展示层按语言说清「从 N 个素材生成的」;任务卡、任务中心、回执三处共用同一份判断。
  • 源头那几处静默截到 80 字的 [:80] 一并去掉(生成、TTS / 播客、链接导入、画板),展示层一律截断、悬停看全文;
    历史迁移里那两处是按旧数据形状重放,一字未动。
  • 你要做什么: 不用做;老任务名照旧显示,新任务不再被截、也不再拼上一整篇。

AI Studio:「智能体环境」头部不再被内容压住

  • 「智能体环境」那块头部此前会被下面的内容盖住(工具栏高度被量成 0,头部塌成 1px)。两处都修了:工具栏高度改用
    ref 回调重新测量,量不到就保留上一次的值(默认 56);并且「草稿 → 选中会话」时整列不再重建
    (SessionDecisions 的 Provider 始终在树上,草稿态传 sessionId={null}、两条查询都不发请求),头部量到的
    始终是同一个节点,测量和布局不再错位。
  • 你要做什么: 不用做。