Skip to content

Releases: ZenHG/ComfyUI-H3-Latent-Relay

Release list

v0.6.39 — ⏩ Finite Run 现在能接「定妆照」了:全片同一组参考图,一镜到底不再在新段开头跳一下 · Finite Run can now take reference stills: one set for the whole run, so a one-take continuation no longer jumps at the start of a new segment

@ZenHG ZenHG released this 23 Oct 09:44

⏩ Finite Run 现在能接「定妆照」了:全片同一组参考图,一镜到底不再在新段开头跳一下。

  • 新增 3 个参考图槽 ref_image_1..3(只接 1 张也行),外加 ref_image_size / refs_mode / ref_anchor_mode / ref_anchor_frames 四个开关。
  • 🔴 参考图与首帧图 image 不能同时接 —— 官方两个生视频节点各缺对方那一槽,同时接会在开跑前直接报错,不会悄悄挑一个用。要人物与场景稳定就留参考图、断开 image。
  • refs_mode 默认 lock = 全片共用同一组图,这是「一镜到底」唯一没有冲突的用法;first_only = 只喂本批第 1 段,后续段靠外观参考跟随镜头。
  • 槽位顺序就是词里 <Picture 1> / <Picture 2> / <Picture 3> 的编号;中间跳过一个槽,后面的编号会整体前移 —— 不报错,但会接错人。
  • 另新增 from_segment:Finite Run 能从第 N 段起跑,「视频起段 → 一次提交跑完剩下的段」这条路通了。
  • 旧图逐位不变:不接参考图时,行为与之前完全一致。

升级动作:图 / 连线 / 参数都不用动;刷新浏览器页面即可。


Finite Run can now take reference stills: one set for the whole run, so a one-take continuation no longer jumps at the start of a new segment.

  • Three new slots, ref_image_1..3 (wiring just one is fine), plus ref_image_size, refs_mode, ref_anchor_mode and ref_anchor_frames.
  • 🔴 Reference stills and the first-frame image image are mutually exclusive. The two official text-to-video nodes each lack the other's slot, so wiring both raises an error before anything runs — nothing is silently chosen for you. Keep the stills and drop image when cast and set must stay stable.
  • refs_mode defaults to lock: every segment sees the same stills, the only conflict-free way to hold a single take. first_only feeds this batch's first segment only and lets the appearance anchor carry the rest.
  • Slot order is the <Picture 1> / <Picture 2> / <Picture 3> numbering in your prompt. Leaving a middle slot empty shifts every later number down — no error, just the wrong face.
  • Also new: from_segment, so Finite Run can start at segment N. "Seed from a video, then run the rest in one submission" now works.
  • Existing graphs are unchanged: without reference stills the behaviour is exactly as before.

Action required: none — no graph, wiring or parameter changes; just refresh the browser page.



此前未单独发布过 GitHub Release 的版本:0.6.38(点击展开)

0.6.38

新增两个节点:把几段拼成一条(「图内拼条」),以及一次提交跑完 N 段(「无头连跑」)。

  • 图内拼条:把每段裁好的画面与音频接到累计后面,全程在张量里做、不重新编码。规格不一致(分辨率 / 采样率 / 声道)会直接报错,不会悄悄把小图拉大去凑数。
  • 无头连跑:一次提交把第 1 段到第 N 段整条跑完,不用点按钮、不用逐段改段号;脚本与画布走同一套节点。每段自动读上一段的落盘文件接着写。
  • 两个节点都不被已有工作流引用,旧图完全不受影响。

升级动作:无需改图或连线。


Two new nodes: join several segments into one picture ("Join AV"), and run N segments in a single submission ("Finite Run").

  • Join AV: appends each trimmed segment's picture and audio onto the accumulated result, entirely in tensors with no re-encoding. Mismatched specs (resolution / sample rate / channels) stop with an error instead of quietly stretching a smaller frame to fit.
  • Finite Run: runs segment 1 through N in one submission — no button clicking, no editing stage numbers by hand, and scripts use the same nodes as the canvas. Each segment reads the previous segment's saved file and continues from it.
  • Neither node is referenced by existing graphs, so old workflows are unaffected.

Action required: none.


v0.6.37 — 新增「视频起段」节点:你可以拿一段已有的视频当整条链的第 1 段,之后照常往外接 · New node, "Seed from Video": take an existing video as segment 1 of the whole chain, then continue outward as usual

@ZenHG ZenHG released this 20 Oct 00:59

新增「视频起段」节点:你可以拿一段已有的视频当整条链的第 1 段,之后照常往外接。

  • 以前本包只能从「自己生成的上一段」开始接,第 1 段必须是它生成的。现在实拍、别人的成片、早先跑过的片段都能当起点。
  • 它替你挡三件事:源视频帧数不在 H3 的时间栅格上(按帧尾裁到最近的合法档,裁掉几帧会写在报告里);画布不是 16 的倍数或与后面各段不一致(宽高填 0 就跟随源视频);源音轨和画面不等长(按画面长度裁尾或补零,没有音轨就给静音种子)。
  • 它拿不到源视频的帧率,一律按 24 fps 处理。源不是 24 fps 的话,画面时长会跟着变——请先把源转成 24 fps 再喂进来;报告里会点名这一行。
  • 源很长时请先切段:视频编码是整段做的,显存峰值随帧数上涨。
  • 顺手放宽了一根线:「桥」的上一段输入以前必接,现在留空也行——它会按片名自己从磁盘读上一段。已经接好的图完全不受影响。

升级动作:无需改图或连线。旧图不引用这个节点,逐位不变。


New node, "Seed from Video": take an existing video as segment 1 of the whole chain, then continue outward as usual.

  • Until now the chain could only start from a segment this pack had generated. Now live footage, someone else's finished shot, or an earlier run can all be the starting point.
  • It blocks three traps for you: source frame counts off the H3 temporal grid (it trims the tail to the nearest legal step and reports how many frames it dropped); a canvas that is not a multiple of 16 or does not match your later segments (set width and height to 0 to follow the source video); and source audio that does not match the picture length (trimmed or zero-padded, or a silent seed when there is no audio track).
  • It cannot read the source frame rate and always treats the frames as 24 fps. If your source is not 24 fps the picture duration will change — convert the source to 24 fps first; the report names this line.
  • One wire relaxed as well: the bridge's previous-segment input used to be mandatory; leaving it empty now works — the bridge reads the previous segment from disk by the film name. Graphs that already wire it are unaffected.

Action required: none. Existing graphs do not reference this node and are bit-identical.

v0.6.36 — 续接段忘了接「裁重叠」的帧数时,以前会悄悄一帧都不裁:接缝把上一段开头重播一遍,而所有检查都显示正常。这一版改成当场报错,并告诉你怎么接 · If a continuation segment's trim count was never wired, nothing used to be trimmed: the seam replayed the previous segment's opening while every check still passed. It now stops right away and tells you how to wire it

@ZenHG ZenHG released this 19 Oct 07:12

续接段忘了接「裁重叠」的帧数时,以前会悄悄一帧都不裁:接缝把上一段开头重播一遍,而所有检查都显示正常。这一版改成当场报错,并告诉你怎么接。

  • 「Trim AV」的 trim_frames 默认从 0 改为 -1(未接线)。它正常由「Copy Bridge」第 3 路供给;已经接好线的图完全不受影响。
  • 忘了这根线:运行会停下并提示——续接段接「Copy Bridge」第 3 路;首段 / 独立段填 0。
  • 首段和独立段本来就不需要裁:把 trim_frames 填 0 即可。
  • 「Post」的低频残差 lowfreq_blur 默认从 64 降到 16:同一段约 22 秒 → 约 1.6 秒,缝上的差别只有 0.0013(看不出来)。老图仍按原来的值跑。
  • 「潜空间分块放大」的空间分块提示补上小显存建议(8G / 2MP 先试 2 块,3~4 块通常够),两个细调参数收进「高级」。
  • 「连跑控制」不再要求先画分组框:没有分组时自动在整张图里找;只有一张图放多套链路时才需要分组。
  • 「跨段统计匹配」的提示写明:目前只有负向证据(近似参照路线会变差),拷贝桥下还没有正向实测。
  • 术语统一:标签改口语(「钉住音频」→「复制音频」、「床声」→「环境声」),提示里的「段头 / 声锚 / 外观锚」改成「本段开头 / 声音参考 / 外观参考」。

升级动作:无需改图或连线。只有「首段放了 Trim AV、却没接线」的图需要把该格填成 0。


If a continuation segment's trim count was never wired, nothing used to be trimmed: the seam replayed the previous segment's opening while every check still passed. It now stops right away and tells you how to wire it.

  • Trim AV's trim_frames now defaults to -1 (not wired) instead of 0. It is normally fed by Copy Bridge's 3rd output; graphs that already wire it are unaffected.
  • If that link is missing, the run stops with a message: wire Copy Bridge's 3rd output for continuation segments, or set 0 for a first or standalone segment.
  • First and standalone segments need no trimming: set trim_frames to 0.
  • Post's low-frequency residual lowfreq_blur now defaults to 16 instead of 64: about 22 s → about 1.6 s on the same shot, with a seam difference of only 0.0013 (invisible). Existing graphs keep their saved value.
  • The spatial-tiling hint now gives low-VRAM advice (on 8 GB at 2 MP try 2 tiles; 3–4 is usually enough), and two fine-tuning knobs moved under Advanced.
  • Chain no longer asks you to draw a group box first: without one it searches the whole graph; groups are only needed when one graph holds several chains.
  • The cross-segment match hint now states it has negative evidence only (the approximate-guide path gets worse); there is no positive measurement on the copy-bridge path yet.
  • Wording cleanup: plainer labels (Pin audio → Copy audio, Bed source → Ambience source) and tooltips without the old jargon.

Action required: none — no graph or wiring changes. Only a graph that puts Trim AV on a first segment without wiring it needs that field set to 0.

v0.6.35 — 英文界面下 Chain 的 7 个按钮此前整块是中文,桥节点标题挂着一行长中文警告。这一版都改对了,并把「切英文后画布上真的是英文」做成自动断言 · The Chain node's 7 buttons used to stay entirely in Chinese on the English UI, and the bridge title carried a long Chinese warning. Both are fixed, and "after switching to English, the canvas really is English" is now an automated assertion

@ZenHG ZenHG released this 16 Oct 04:05

英文界面下 Chain 的 7 个按钮此前整块是中文,桥节点标题挂着一行长中文警告。这一版都改对了,并把「切英文后画布上真的是英文」做成自动断言。

  • Chain 的 7 个按钮跟着语言走:切英文显示 ▶ Run (run the current segment once) 这类;切回中文原样。点起来的反应不变。
  • 桥节点标题的额度角标改短:一长段中文(⚠ 音频参考 4 个(官方上限 3):你的 3 + 本包 1。模型不拦…)改成 ⚠ refs 4/3。三种形态(用满 / 越界 / 读不到)含义不变,长解释挪进提示(悬停 音频参考窗 那格)。
  • 英文提示开头改成 [Wiring] Take …(原用全角 【…】,英文里是排版异物);另修 3 处英文还写着旧口径的提示(TrimAV / Post 跨段匹配、CopyBridge 实验开关)。
  • 示例图 fullflow 的 5 个节点标题改了写法:旧名切英文也不变;现在是「默认名 + (说明)」,名字那半跟着语言走。接线、参数、槽位一个字节没动。
    升级动作:不用改任何东西;装完刷新浏览器页面(F5)。切语言开关即可看到英文按钮。

The Chain node's 7 buttons used to stay entirely in Chinese on the English UI, and the bridge title carried a long Chinese warning. Both are fixed, and "after switching to English, the canvas really is English" is now an automated assertion.

  • The Chain node's 7 buttons follow the language. In English: ▶ Run (run the current segment once); back in Chinese they are as before. Clicking behaves the same.
  • The bridge title's audio-reference badge is much shorter. The old badge was a full sentence of Chinese spelling out the audio-reference count and the official limit; it is now the compact ⚠ refs 4/3 — three forms (full / over / unreadable), same meaning. The long explanation moved into the tooltip (hover Audio reference window).
  • English tooltips now open with [Wiring] Take … instead of full-width 【…】. Three tooltips whose English still described the old behaviour are corrected (TrimAV / Post cross-segment matching, CopyBridge experiment switch).
  • The fullflow example's 5 node titles were rewritten from old names that never changed with the language into default name + (explanation), so the name part now follows the language. Wiring, parameters and widget slots are untouched.

Action required: nothing; refresh the browser page (F5). Use the language switch to see the English buttons.


v0.6.34 — 默认值修了矛盾、声锚不用接线、提示重写成人话、实验功能有了开关、落盘文件带上来龙去脉。图、连线、图 JSON 都不用改;但请刷新浏览器页面 · Self-contradictory defaults fixed, the voice anchor needs no wiring, every tooltip rewritten in plain language, the experiments got a switch, and saved files carry their lineage. No graph or JSON changes — but refresh the browser page

@ZenHG ZenHG released this 15 Oct 16:45

默认值修了矛盾、声锚不用接线、提示重写成人话、实验功能有了开关、落盘文件带上来龙去脉。图、连线、图 JSON 都不用改;但请刷新浏览器页面。

  • 音频缝的「头部补丁」默认打开(1.2 秒):以前默认关 ⇒ 每段环境声各起各的;现在段首 1.2 秒用上一段的环境声,台词守卫兜底。⚠ 段号 ≥1 而上一段音频不在盘上(片名填错 / 没跑过)会报错并说明怎么办。老工作流不受影响。
  • 声锚可以「只填段号」:以前要搭两个节点再拉一根线;现在填「声锚段号」就自动读那段音频。接线仍然优先。
  • 全部悬浮提示重写:只讲它做什么、打开会怎样、什么时候该调;同一条提示不再有两套中文。标签也按同一张术语表统一(48 条)并加机检。
  • 两个「好功能默认关」打开了:段头糊区补偿(settle_auto 0.5,不糊的帧不动)与连跑完自动拼成片(auto_concat)。
  • 实验功能有了看得见的开关:原先只能靠 run 目录的配置文件。默认 auto = 与旧版逐位一致 ⇒ 老配置不受影响;off = 彻底关;选对应档 = 强制开。
  • 落盘文件带上了来龙去脉:每段 latent 头里记下片名 / 段号 / 上一段(format 2)。纯附加:旧版读新文件、新版读旧文件都照读。
  • 跨段统计匹配更保守:缝的差异小于噪声时不再去修,修时也不放大差异。噪声大的片段头可能不再被修,那是设计。

升级动作:不用改任何东西;装完刷新浏览器页面(F5)。


Self-contradictory defaults fixed, the voice anchor needs no wiring, every tooltip rewritten in plain language, the experiments got a switch, and saved files carry their lineage. No graph or JSON changes — but refresh the browser page.

  • The audio seam's head patch is on by default (1.2 s): it used to be off, so each segment restarted its own ambience. The head 1.2 s now takes the previous segment's ambience, dialogue guard as a backstop. ⚠ From segment 2 on, a missing previous audio errors out instead of quietly producing discontinuous audio. Existing graphs are unaffected.
  • The voice anchor takes a stage number alone: it used to need two nodes and a wire. A wired input wins.
  • Every tooltip rewritten: what it does, what turning it on changes, when to adjust it. No parameter has two Chinese wordings any more; labels follow one 48-entry glossary, machine-checked.
  • Two features that shipped off are now on: head soft-zone compensation (settle_auto 0.5, clear frames untouched) and auto-joining at the end of a chain run (auto_concat).
  • The experiments have a visible switch: previously only a config file in the run directory. Default auto is bit-identical to the old behaviour; off disables them; naming one forces it on.
  • Saved latents carry their lineage: each stage file's header records film name, stage, and parent stage (format 2). Purely additive: both directions still read.
  • Cross-segment matching is more conservative: differences below the noise floor are no longer corrected, and a correction never amplifies the step. A noisy head may go uncorrected — by design.

Action required: nothing; refresh the browser page (F5).

v0.6.33 — 🔴 图、连线、参数都不用改,但要刷新浏览器页面 · 🔴 No graph, wiring or parameter changes — but refresh the browser page

Choose a tag to compare

@ZenHG ZenHG released this 12 Oct 14:30

🔴 图、连线、参数都不用改,但要刷新浏览器页面。

低显存多了个「省得更干净」的旋钮:spatial_tiles(沿画面长边切块放大)—— 每块的时间轴完整 ⇒ 时间上下文一点不丢,代价换成空间边界变窄(用 spatial_overlap + seam_feather 把接缝压进过渡带)。默认 1 = 不切,与旧版逐位一致;与 chunks 可叠加(时间分块在外、空间分块在内)。🔴 切了就会改画面 ⇒ 切完必须重看缝。另:prompts 只有 1 块词而本段 stage>0 时,报错会直接给出两种正确接法。

顺带修掉「🧩 拼成一条」的一批问题:① 不再误报"一段视频文件都没找到"(兜底回扫只认真落了段视频的提交);② 失败时状态格显示真错因;③ 两段同规格却报"规格不一致"的伪差修掉(fps 改相对容差 0.5%);④ 连跑/拼接按钮整行都能点;⑤ 官方「停止/取消」与队列清空后状态会回落;⑥ prompts 留空不再被拦。

升级动作:不用改任何东西;装完刷新浏览器页面(F5)。想省显存就把「空间分块数」从 1 往上调。


🔴 No graph, wiring or parameter changes — but refresh the browser page.

A "cleaner" VRAM knob: spatial_tiles — it upscales in tiles along the long edge, so every tile keeps its whole time axis and no temporal context is lost; the cost moves to the spatial boundary, handled by spatial_overlap + seam_feather. Default 1 = no split, bit-identical to the old path; it combines with chunks (time chunking outside, spatial tiling inside). 🔴 Splitting still changes the picture ⇒ re-inspect the seam afterwards. Also: when prompts holds a single block and the segment is stage>0, the error now names both correct wirings.

Also fixes a batch of "🧩 Join into one" issues: ① it no longer falsely reports that no segment video was found (the fallback scan only accepts submissions that actually wrote a segment video); ② on failure the status cell shows the real cause; ③ a false "spec mismatch" between identically sized segments is fixed (fps uses a 0.5% relative tolerance); ④ chain and join buttons are clickable across the whole row; ⑤ the official Stop/Cancel and clearing the queue now make the status fall back; ⑥ an empty prompts is no longer blocked.

Action required: nothing. Refresh the browser page (F5) after installing. Raise "spatial tiles" above 1 to save VRAM.

v0.6.32 — 🔴 「跑到第几段」这一格改了含义。图、连线、参数都不用改,但要刷新浏览器页面 · 🔴 The "run up to which stage" cell changed meaning. No graph, wiring or parameter change — but refresh the browser page

@ZenHG ZenHG released this 08 Oct 15:24

🔴 「跑到第几段」这一格改了含义。图、连线、参数都不用改,但要刷新浏览器页面。

① segments 现在 = 「跑到第 N 段」(以前读作「再跑 N 段」)。从第 1 段起跑时两者相同,
老图行为不变;只有从中间接着跑才不同:段号已在第 3 段、填 3 ⇒ 只跑这 1 段。
段号已越过这一格 ⇒ 不排队,并告诉你该填几。

② 「⏭ 续跑」不再把已跑好的段号退回去。 起点取「进度段号」与「画布段号」里更靠后的那个:
正常跑完后画布段号已经更新,续跑就直接接着跑;只有宿主采样中途被杀才重跑那一段。

③ 按钮"点了没反应"现在看得见(弹一次提示)。

④ 拼接不再把「视频轨有起始偏移」的段判成坏段(有些落盘节点会这么写)⇒ 现在按「视频结束时刻」比。

⑤ 响度均衡默认开(不接声锚也生效)。 以前不接锚时每段电平由模型自己决定,实测同片三段差
7.97 dB;现在统一对齐(−23.0 dBFS),实测 8.08 → 2.43 dB。关掉:取消勾选 loudness_normalize。

升级动作:把 web/ 换成新版并刷新浏览器页面(F5)。图、连线、参数都不用改。


🔴 The "run up to which stage" cell changed meaning. No graph, wiring or parameter change — but refresh the browser page.

① segments now means "run up to stage N" (it used to read as "N more stages"). Starting from
stage 1 the two are identical, so existing graphs behave as before; they differ only when you start
from the middle
— canvas stage 3 with segments=3 runs that one stage. If the stage number is
already past it, nothing is queued and it says what to enter.

② «⏭ Resume» no longer pushes your finished stage number backwards. The start point is the later
of the progress file's stage and the canvas stage; after a normal finish the canvas number is already
ahead, so resume just continues. Only a host killed mid-sampling re-runs that stage.

③ A blocked button is now visible (a popup, not silence).

④ Concatenation no longer rejects segments whose video track has a non-zero start (some save nodes
write it that way) — it now compares the video's end time.

⑤ Loudness levelling is now on by default (it works without a voice anchor too). Without an anchor
each segment's level was up to the model, measured at a 7.97 dB spread across three segments; all
segments are now aligned to one target (−23.0 dBFS), measured 8.08 → 2.43 dB. Untick
loudness_normalize on the audio-seam node to turn it off.

Action required: replace web/ with the new version and refresh the browser page (F5).
No graph, wiring or parameter changes.

v0.6.31 — 🔴 修两个一直坏着的按钮;run_id 改成"任意位置都同步",并且 API 侧也有了 · 🔴 Two buttons that have been broken since 0.6.12 are fixed; run_id now syncs from anywhere, and the API gets it too

@ZenHG ZenHG released this 08 Oct 03:22

🔴 修两个一直坏着的按钮;run_id 改成"任意位置都同步",并且 API 侧也有了。

① 连跑与 Run 两个按钮从 0.6.12 起就是坏的 —— 点下去只报「内部出错」。
另外五个按钮(Approve / 续跑 / Stop / 拼成一条 / Reset)一直正常。
② run_id 的"改一处、其它自动跟着变"从来没生效过(0.6.19 引入),
而且失败无声 ⇒ 音频缝与桥的名字不一致时,床源会去别的目录找音频。

改动:① 同步范围改成「图上只有一条连跑节点 ⇒ 全图同步」,节点摆在哪都行;
只有一张图里画了多条连跑节点(=一部图放两部片子)才按分组框隔离。
② 后端补上同一套语义:新函数 relay_core.sync_run_id 与新接口 POST /h3relay/runid,
跑批脚本不用再手改六处。③ 新增一条浏览器冒烟门,专盯"后端全绿但按钮不能用"这类静默失效。

另:本版一并包含未单独发布的 0.6.30(纯内部拆包)。你唯一可能注意到的是
下载件从 24 个文件变成 42 个 —— 体积与用法都不变。

升级动作:刷新一次浏览器即可(前端脚本即时加载)。跑批脚本可选用
POST /h3relay/runid 先自检一遍 run_id 是否一致。


🔴 Two buttons that have been broken since 0.6.12 are fixed; run_id now syncs from anywhere, and the API gets it too.

1. The auto-run and single-run buttons have been broken since 0.6.12 — clicking them only reported an
internal error. The other five buttons (approve, resume, stop, assemble-into-one, reset) always worked.
2. The "edit once, the rest follow" run_id sync never actually worked (added in 0.6.19) and it failed
silently, so when the audio seam's run_id disagreed with the bridge, the bed sound was looked up in the
wrong folder.

What changed: (1) the sync scope is now "a single chain node on the graph means sync across the whole
graph", so node positions no longer matter; grouping only applies when one graph deliberately holds several
films. (2) The back end gained the same semantics: a new relay_core.sync_run_id helper plus a new
POST /h3relay/runid route, so batch scripts no longer edit six fields by hand. (3) Added a
browser-level smoke gate that targets exactly the failure mode where "the back end is green but the buttons
do not work".

Note: this release also includes 0.6.30, which was never published on its own (a purely internal
refactor). The only thing you may notice is that the download now contains 42 files instead of 24 —
same total size, same usage.

Action required: just reload your browser (front-end scripts load on refresh). Batch scripts may
optionally call POST /h3relay/runid to check that every run_id agrees before submitting.


此前未单独发布过 GitHub Release 的版本:0.6.30(点击展开)

0.6.30

纯内部重构:核心代码从单文件拆成一个包 —— 行为逐位不变,你什么都不用改。

relay_core 原本是一个 5482 行、23 万字符的单文件;现在拆成 relay_core/ 包(11 个文件:
时序网格 / latent 存取 / 续接计划 / 音频缝 / 接缝检测 / 拷贝桥 / 只读观测 / 拼接成片 / 分块放大 /
词分发)。对使用者的接口一个都没变:relay_core 仍是同一个导入名,所有函数与常量照旧可用
(包里的 __init__.py 全量再导出);节点、连线、参数、图 JSON 一律不动。

唯一看得到的变化在下载件上:最小分发集从 24 个文件变成 42 个(多出来的都是包内的子模块,
单个文件都变小了,合计体积基本不变)。

离线断言全部照旧通过,并且已逐个符号比对确认代码逐字搬运、未改一行算式。

升级动作:无需任何动作。图 / 连线 / 参数都不用改;脚本里的 from relay_core import … 照旧。


A purely internal refactor: the core is now a package instead of one file — behaviour is unchanged,
bit for bit.

relay_core used to be a single 5,482-line file. It is now the relay_core/ package (11 files: timing
grid, latent I/O, relay planning, audio seam, seam detection, copy bridge, read-only observations,
concatenation, chunked upscaling, prompt dispatch). Nothing about the interface changes: relay_core
is still the same import name and every function and constant remains available (the package's
__init__.py re-exports all of them), so nodes, links, parameters and workflow JSON are untouched.

The only visible difference is in the download: the minimal distribution set grows from 24 files to 42
(the extra entries are the submodules, each smaller than the old file, and total size is roughly
unchanged).

The offline assertions all still pass, and every symbol was compared one by one to confirm the code was
moved verbatim with no expression changed.

Action required: none. Workflows, links and parameters are unaffected; any
from relay_core import … in your scripts keeps working.



v0.6.29 — 节点上的中/EN 按钮改成跟随官方语言设置;顺手修掉一个把「改了没生效」拖了整整一轮的坑 · The per-node Chinese/EN button now follows the official language setting — plus a fix for a trap that wasted a whole round of "my change did nothing"

@ZenHG ZenHG released this 07 Oct 02:09

节点上的中/EN 按钮改成跟随官方语言设置;顺手修掉一个把「改了没生效」拖了整整一轮的坑。

🔴 默认语言改为跟随官方设置(设置里的 Language,即 Comfy.Locale),不再是"看界面语言"。
官方改语言 ⇒ 本包节点跟着变;点节点上的按钮才覆盖,覆盖后官方再切语言不冲掉你的选择。
单向:我们的按钮只改本包节点,不写官方设置 —— 写它会触发 ComfyUI 重载当前工作流。
🔴 修的坑:此前读的 <html lang> 实测与官方设置不一致(官方设了中文,它仍是 en)
⇒ 会出现"官方界面中文、本包节点英文"。

升级动作:无需改图或连线,但必须刷新浏览器页面(F5)—— 重启 ComfyUI 进程不算。
想让节点回到跟随官方语言:清一次浏览器本地存储里的 h3relay_lang。


The per-node Chinese/EN button now follows the official language setting — plus a fix for a trap that
wasted a whole round of "my change did nothing".

🔴 The default language now follows the official setting (Settings → Language, i.e. Comfy.Locale)
instead of "whatever the interface language is". Changing the official language makes this pack's nodes
follow; the node button overrides that, and the official setting no longer clobbers your choice.
One-way: our button changes only this pack's nodes and never writes the official setting —
writing it makes ComfyUI reload the current workflow. 🔴 The trap it fixes: the previously read
<html lang> was measured to disagree with the official setting (official set to Chinese while it
still said en) ⇒ producing "Chinese official UI, English pack nodes".

Action required: no graph or wiring changes, but you must reload the browser page (F5) —
restarting the ComfyUI process is not enough. To put the nodes back on the official language, clear the
h3relay_lang key in browser local storage.


v0.6.28 — 节点上加一个中/EN 按钮;顺手修掉分发集漏发前端文件的毛病 · A Chinese/EN button on every node — plus a fix for the minimal distribution set

Choose a tag to compare

@ZenHG ZenHG released this 06 Oct 04:13

节点上加一个中/EN 按钮;顺手修掉分发集漏发前端文件的毛病。

🆕 画布节点中英切换(UI-only):本包 8 个节点各多一个中/EN 按钮,点一下就把全包的
节点标题、参数标签、端口名切成中文 / 英文(下拉框显示中文、存档值不变)。
默认跟随界面语言,点按钮才覆盖(记在浏览器本地)。🔴 只改显示:name、下拉框的值、
工作流 JSON 一个字节都不动;你自己改过的节点标题原样保留;「音频参考额度」提示不会被抹掉。

🔴 修一个分发集缺陷:最小分发集里漏发了 3 个前端文件(relay_kit_sync.js /
relay_kit_refs.js / relay_kit_refs_ui.js)。relay_kit_chain.js 用 ES import 依赖它们
⇒ 装最小集的用户整个 chain.js 都不执行(连跑 / 🧩 拼接 / 额度提示全废),
而打包器自验还打印 [OK](只验「清单里的在不在」,从不验「有没有漏」)。
已补齐,并给打包器加了反向门:web/ 下受控的 .js 必须与清单一一对应。

另:深度文档补上 VA(跨段音色累积) 与声锚叠加的说明(中英双语)。

升级动作:无需改图或连线。装了最小分发集(dist/)的请重装一次;
从 Comfy Registry / Manager 装的不受影响(那个包按 .comfyignore 打包,web/ 是全的)。


A Chinese/EN button on every node — plus a fix for the minimal distribution set.

🆕 Canvas Chinese/EN toggle (UI-only): each of this pack's 8 nodes now carries a small Chinese/EN button;
one click switches the titles, parameter labels and port names of the whole pack (dropdowns show Chinese
while their stored value stays untouched). It follows the UI language by default; the button overrides
that and the choice is remembered in the browser. 🔴 Display only: name, dropdown values and the workflow
JSON do not change by a single byte; a title you renamed yourself is kept; the audio-reference-budget hint
appended to a title survives.

🔴 A distribution-set defect, fixed: the minimal bundle shipped without 3 front-end files
(relay_kit_sync.js / relay_kit_refs.js / relay_kit_refs_ui.js). relay_kit_chain.js imports them as ES
modules ⇒ anyone installing the minimal bundle got chain.js not executing at all (auto-run, the 🧩
concat button and the budget hint all dead) — while the bundler's self-check still printed [OK] (it only checks
that the files in the list exist, never that any are missing). They are shipped now, and the bundler
gained the reverse gate: every version-controlled .js under web/ must match the manifest one-to-one.

Also: the deep docs now cover VA (cross-segment timbre accumulation) and how it combines with the voice
anchor (bilingual).

Action required: no graph or wiring changes. If you installed the minimal bundle (dist/), reinstall
it
; installs from the Comfy Registry / Manager are unaffected (that package is built from .comfyignore and
ships the whole web/).