@@ -10,37 +10,54 @@ function getNumberDefaults(inputData, defaultStep) {
1010 return { val : defaultVal , config : { min, max, step : 10.0 * step } } ;
1111}
1212
13- export function addRandomizeWidget ( node , targetWidget , name , defaultValue = false ) {
14- const randomize = node . addWidget ( "toggle" , name , defaultValue , function ( v ) { } , {
15- on : "enabled" ,
16- off : "disabled" ,
17- serialize : false , // Don't include this in prompt.
18- } ) ;
19-
20- randomize . afterQueued = ( ) => {
21- if ( randomize . value ) {
22- const min = targetWidget . options ?. min ;
23- let max = targetWidget . options ?. max ;
24- if ( min != null || max != null ) {
25- if ( max ) {
26- // limit max to something that javascript can handle
27- max = Math . min ( 1125899906842624 , max ) ;
28- }
29- targetWidget . value = Math . floor ( Math . random ( ) * ( ( max ?? 9999999999 ) - ( min ?? 0 ) + 1 ) + ( min ?? 0 ) ) ;
30- } else {
31- targetWidget . value = Math . floor ( Math . random ( ) * 1125899906842624 ) ;
32- }
13+ export function addValueControlWidget ( node , targetWidget , defaultValue = "randomize" , values ) {
14+ const valueControl = node . addWidget ( "combo" , "control_after_generate" , defaultValue , function ( v ) { } , {
15+ values : [ "fixed" , "increment" , "decrement" , "randomize" ] ,
16+ serialize : false , // Don't include this in prompt.
17+ } ) ;
18+ valueControl . afterQueued = ( ) => {
19+
20+ var v = valueControl . value ;
21+
22+ let min = targetWidget . options . min ;
23+ let max = targetWidget . options . max ;
24+ // limit to something that javascript can handle
25+ max = Math . min ( 1125899906842624 , max ) ;
26+ min = Math . max ( - 1125899906842624 , min ) ;
27+ let range = ( max - min ) / ( targetWidget . options . step / 10 ) ;
28+
29+ //adjust values based on valueControl Behaviour
30+ switch ( v ) {
31+ case "fixed" :
32+ break ;
33+ case "increment" :
34+ targetWidget . value += targetWidget . options . step / 10 ;
35+ break ;
36+ case "decrement" :
37+ targetWidget . value -= targetWidget . options . step / 10 ;
38+ break ;
39+ case "randomize" :
40+ targetWidget . value = Math . floor ( Math . random ( ) * range ) * ( targetWidget . options . step / 10 ) + min ;
41+ default :
42+ break ;
3343 }
34- } ;
35- return randomize ;
36- }
44+ /*check if values are over or under their respective
45+ * ranges and set them to min or max.*/
46+ if ( targetWidget . value < min )
47+ targetWidget . value = min ;
48+
49+ if ( targetWidget . value > max )
50+ targetWidget . value = max ;
51+ }
52+ return valueControl ;
53+ } ;
3754
3855function seedWidget ( node , inputName , inputData ) {
3956 const seed = ComfyWidgets . INT ( node , inputName , inputData ) ;
40- const randomize = addRandomizeWidget ( node , seed . widget , "Random seed after every gen" , true ) ;
57+ const seedControl = addValueControlWidget ( node , seed . widget , "randomize" ) ;
4158
42- seed . widget . linkedWidgets = [ randomize ] ;
43- return { widget : seed , randomize } ;
59+ seed . widget . linkedWidgets = [ seedControl ] ;
60+ return seed ;
4461}
4562
4663const MultilineSymbol = Symbol ( ) ;
0 commit comments