dsh-comfyui-rp 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # 更新记录
2
2
 
3
+ ## 0.2.2
4
+
5
+ - **LoRA 强度可以填负数**:工作台「连续图」的档位、LoRA 页每条的强度都允许 `-5 ~ 5`(反相 LoRA 用)。
6
+ - 这两个输入框在输入过程中不再被强制夹取:打「-」「-.5」这种中间态会先留在文本框里,**失焦或按回车**才夹到范围内并写回。
7
+ - 工作台的分辨率宽高也是同样规则(这条从 0.2.1 起就是)。
8
+ - 连续图说明里补了一句「强度可以填负数(反相),范围 -5 ~ 5」。
9
+
3
10
  ## 0.2.1 — 首个公开发布
4
11
 
5
12
  第一个放到 npm / 插件市场里的版本,功能面就是 README 里描述的这一整套:
package/lib/client.js CHANGED
@@ -6561,6 +6561,8 @@ window.__ModuleLoader__.load({
6561
6561
  })();
6562
6562
  var [contCount, setContCount] = useState(initialStrengths.count);
6563
6563
  var [contStrengths, setContStrengths] = useState(initialStrengths.values);
6564
+ // 连续图档位的输入原文:允许先打「-」「-.5」,离开输入框才兜底。
6565
+ var [contText, setContText] = useState({});
6564
6566
  var cfgTimer = useRef(null);
6565
6567
  var wfSkip = useRef(!!draft);
6566
6568
 
@@ -6786,12 +6788,37 @@ window.__ModuleLoader__.load({
6786
6788
  setContCount(n);
6787
6789
  saveContinuous({ count: n, strengths: contStrengths }, true);
6788
6790
  };
6791
+ // 档位允许负数(反相 LoRA):输入期间保留原文(「-」「-.5」这种中间态),
6792
+ // 失焦 / 回车才夹到 -5..5 并落库。夹取范围和 lib/config.js 的服务端归一化一致。
6789
6793
  var setStrength = function (i, value) {
6790
6794
  var next = contStrengths.slice();
6791
- next[i] = clamp(value, 0, 2);
6795
+ next[i] = Math.round(clamp(value, -5, 5) * 100) / 100;
6792
6796
  setContStrengths(next);
6793
6797
  saveContinuous({ strengths: next }, false);
6794
6798
  };
6799
+ var editContStrength = function (i, raw) {
6800
+ setContText(function (old) {
6801
+ var n = Object.assign({}, old);
6802
+ n[i] = String(raw);
6803
+ return n;
6804
+ });
6805
+ var v = Number(raw);
6806
+ if (String(raw).trim() !== "" && isFinite(v)) {
6807
+ var next = contStrengths.slice();
6808
+ next[i] = v;
6809
+ setContStrengths(next);
6810
+ saveContinuous({ strengths: next }, false);
6811
+ }
6812
+ };
6813
+ var commitContStrength = function (i, raw) {
6814
+ setContText(function (old) {
6815
+ var n = Object.assign({}, old);
6816
+ delete n[i];
6817
+ return n;
6818
+ });
6819
+ if (String(raw === undefined || raw === null ? "" : raw).trim() === "") return;
6820
+ setStrength(i, raw);
6821
+ };
6795
6822
 
6796
6823
  var loraOptions = [];
6797
6824
  (loraStacks || []).forEach(function (st) {
@@ -6939,11 +6966,15 @@ window.__ModuleLoader__.load({
6939
6966
  h("div", { className: "ac-strengthrow" },
6940
6967
  contStrengths.slice(0, contCount).map(function (v, i) {
6941
6968
  return h(Field, { key: i, label: "档位" + (i + 1) }, h(NumInput, {
6942
- step: "0.05", value: v, onChange: function (e) { setStrength(i, e.target.value); },
6969
+ step: "0.05", min: "-5", max: "5",
6970
+ value: contText[i] !== undefined ? contText[i] : String(v),
6971
+ onChange: function (e) { editContStrength(i, e.target.value); },
6972
+ onBlur: function (e) { commitContStrength(i, e.target.value); },
6973
+ onKeyDown: function (e) { if (e.key === "Enter") e.currentTarget.blur(); },
6943
6974
  }));
6944
6975
  }),
6945
6976
  ),
6946
- h("div", { className: "ac-hint" }, "支持 LoRA 堆、单 LoRA、Power / Stacker / Tag 节点;仅影响最后一组提示词,按设置张数用不同强度连续生图"),
6977
+ h("div", { className: "ac-hint" }, "支持 LoRA 堆、单 LoRA、Power / Stacker / Tag 节点;仅影响最后一组提示词,按设置张数用不同强度连续生图。强度可以填负数(反相),范围 -5 ~ 5。"),
6947
6978
  ),
6948
6979
  ),
6949
6980
 
@@ -7783,6 +7814,9 @@ window.__ModuleLoader__.load({
7783
7814
  var dropRef = useRef(null);
7784
7815
  // 点 LoRA 名字就地改名:输入期间只改本地草稿,回车 / 失焦才写进 loraState。
7785
7816
  var [nameEdit, setNameEdit] = useState(null);
7817
+ // 强度输入:输入期间只改文本框(允许「-」「-.5」这种中间态),失焦 / 回车才夹到 -5..5 写回。
7818
+ // 以前每按一次键就 Number(),"-" 会变成 NaN 被弹回去,负数根本打不进去。
7819
+ var [numText, setNumText] = useState({});
7786
7820
  var nameEditRef = useRef(null);
7787
7821
  var applyTimer = useRef(null);
7788
7822
  // 所有临时覆盖串行发送:保存到工作流时先等已发出的覆盖落地,
@@ -7850,6 +7884,29 @@ window.__ModuleLoader__.load({
7850
7884
  };
7851
7885
  if (immediate) send(); else applyTimer.current = setTimeout(send, 260);
7852
7886
  };
7887
+ var numKey = function (stackId, idx) { return stackId + ":" + idx; };
7888
+ // 强度:输入时先别夹、也别丢原文;失焦 / 回车才落到 -5..5。
7889
+ var editStrength = function (stackId, idx, raw) {
7890
+ setNumText(function (old) {
7891
+ var n = Object.assign({}, old);
7892
+ n[numKey(stackId, idx)] = String(raw);
7893
+ return n;
7894
+ });
7895
+ var v = Number(raw);
7896
+ if (String(raw).trim() !== "" && isFinite(v)) {
7897
+ updateEntry(stackId, idx, { strength: v, clipStrength: v });
7898
+ }
7899
+ };
7900
+ var commitStrength = function (stackId, idx, raw) {
7901
+ setNumText(function (old) {
7902
+ var n = Object.assign({}, old);
7903
+ delete n[numKey(stackId, idx)];
7904
+ return n;
7905
+ });
7906
+ if (String(raw === undefined || raw === null ? "" : raw).trim() === "") return;
7907
+ var v = Math.round(clamp(raw, -5, 5) * 100) / 100;
7908
+ updateEntry(stackId, idx, { strength: v, clipStrength: v });
7909
+ };
7853
7910
  var updateEntry = function (stackId, idx, patch, immediate) {
7854
7911
  if (!data) return;
7855
7912
  var next = JSON.parse(JSON.stringify(data));
@@ -8106,9 +8163,13 @@ window.__ModuleLoader__.load({
8106
8163
  onClick: function () { if (!taken) beginNameEdit(st.nodeId, i, e.label || e.name); },
8107
8164
  }, e.label || e.name),
8108
8165
  h("input", {
8109
- type: "number", step: "0.05", value: e.strength, disabled: taken,
8110
- title: taken ? "连续图接管中:强度按连续图档位,这里不生效" : "强度",
8111
- onChange: function (ev) { updateEntry(st.nodeId, i, { strength: Number(ev.target.value), clipStrength: Number(ev.target.value) }); },
8166
+ type: "number", step: "0.05", min: "-5", max: "5",
8167
+ value: numText[numKey(st.nodeId, i)] !== undefined ? numText[numKey(st.nodeId, i)] : e.strength,
8168
+ disabled: taken,
8169
+ title: taken ? "连续图接管中:强度按连续图档位,这里不生效" : "强度,可用负数;范围 -5 ~ 5",
8170
+ onChange: function (ev) { editStrength(st.nodeId, i, ev.target.value); },
8171
+ onBlur: function (ev) { commitStrength(st.nodeId, i, ev.target.value); },
8172
+ onKeyDown: function (ev) { if (ev.key === "Enter") ev.currentTarget.blur(); },
8112
8173
  }),
8113
8174
  canSort ? h("button", {
8114
8175
  className: "ac-btn sm", disabled: taken,
package/lib/meta.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export const PACKAGE_NAME = 'dsh-comfyui-rp';
8
8
  export const PLUGIN_NAME = 'dsh-comfyui-rp';
9
- export const VERSION = '0.2.1';
9
+ export const VERSION = '0.2.2';
10
10
 
11
11
  /** 对外路由前缀。不能带尾斜杠(dsh-host-webserver 的 prefix 匹配规则)。 */
12
12
  export const ROUTE_PATH = '/__airp_comfy';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-comfyui-rp",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "ComfyRP Bridge:装在 DSH 里的本地文生图自动化桥。捕获会话正文 → 提示词会话 → 本地 ComfyUI 出图 → 图片回到右侧栏 / 悬浮球 / 图库。不依赖外部桥进程,也不调用 LLM。",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",