From 7c93afd2cd826aea7b49e49f42502b5ac03b647d Mon Sep 17 00:00:00 2001 From: City <125218114+city96@users.noreply.github.com> Date: Tue, 19 Sep 2023 05:20:00 +0200 Subject: [PATCH] Manual float precision, toggle for old behavior (#1541) * Add toggle for float rounding * Add manual precision override --- web/scripts/ui.js | 19 +++++++++++++++++++ web/scripts/widgets.js | 12 +++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/web/scripts/ui.js b/web/scripts/ui.js index f39939bf..1e792016 100644 --- a/web/scripts/ui.js +++ b/web/scripts/ui.js @@ -577,6 +577,25 @@ export class ComfyUI { defaultValue: false, }); + this.settings.addSetting({ + id: "Comfy.DisableFloatRounding", + name: "Disable rounding floats (requires page reload).", + type: "boolean", + defaultValue: false, + }); + + this.settings.addSetting({ + id: "Comfy.FloatRoundingPrecision", + name: "Decimal places [0 = auto] (requires page reload).", + type: "slider", + attrs: { + min: 0, + max: 6, + step: 1, + }, + defaultValue: 0, + }); + const fileInput = $el("input", { id: "comfy-file-input", type: "file", diff --git a/web/scripts/widgets.js b/web/scripts/widgets.js index 40b3067b..942be8f3 100644 --- a/web/scripts/widgets.js +++ b/web/scripts/widgets.js @@ -1,6 +1,6 @@ import { api } from "./api.js" -function getNumberDefaults(inputData, defaultStep) { +function getNumberDefaults(inputData, defaultStep, app) { let defaultVal = inputData[1]["default"]; let { min, max, step, round} = inputData[1]; @@ -8,12 +8,14 @@ function getNumberDefaults(inputData, defaultStep) { if (min == undefined) min = 0; if (max == undefined) max = 2048; if (step == undefined) step = defaultStep; - // precision is the number of decimal places to show. // by default, display the the smallest number of decimal places such that changes of size step are visible. let precision = Math.max(-Math.floor(Math.log10(step)),0); + if (app.ui.settings.getSettingValue("Comfy.FloatRoundingPrecision") > 0) { + precision = app.ui.settings.getSettingValue("Comfy.FloatRoundingPrecision"); + } - if (round == undefined || round === true) { + if (!app.ui.settings.getSettingValue("Comfy.DisableFloatRounding") && (round == undefined || round === true)) { // by default, round the value to those decimal places shown. round = Math.round(1000000*Math.pow(0.1,precision))/1000000; } @@ -273,7 +275,7 @@ export const ComfyWidgets = { "INT:noise_seed": seedWidget, FLOAT(node, inputName, inputData, app) { let widgetType = isSlider(inputData[1]["display"], app); - const { val, config } = getNumberDefaults(inputData, 0.5); + const { val, config } = getNumberDefaults(inputData, 0.5, app); return { widget: node.addWidget(widgetType, inputName, val, function (v) { if (config.round) { @@ -285,7 +287,7 @@ export const ComfyWidgets = { }, INT(node, inputName, inputData, app) { let widgetType = isSlider(inputData[1]["display"], app); - const { val, config } = getNumberDefaults(inputData, 1); + const { val, config } = getNumberDefaults(inputData, 1, app); Object.assign(config, { precision: 0 }); return { widget: node.addWidget(