diff --git a/backend/invoke_ai_web_server.py b/backend/invoke_ai_web_server.py index 56696e6b5c..89d67a6e70 100644 --- a/backend/invoke_ai_web_server.py +++ b/backend/invoke_ai_web_server.py @@ -699,6 +699,8 @@ class InvokeAIWebServer: 'variations', 'steps', 'cfg_scale', + 'threshold', + 'perlin', 'step_number', 'width', 'height', diff --git a/backend/server.py b/backend/server.py index de4397502a..d0977b9dc3 100644 --- a/backend/server.py +++ b/backend/server.py @@ -486,6 +486,8 @@ def parameters_to_generated_image_metadata(parameters): "variations", "steps", "cfg_scale", + "threshold", + "perlin", "step_number", "width", "height", diff --git a/ldm/dream/args.py b/ldm/dream/args.py index aabd900213..4399965dc9 100644 --- a/ldm/dream/args.py +++ b/ldm/dream/args.py @@ -529,6 +529,18 @@ class Args(object): type=float, help='Classifier free guidance (CFG) scale - higher numbers cause generator to "try" harder.', ) + render_group.add_argument( + '--threshold', + default=0.0, + type=float, + help='Latent threshold for classifier free guidance (CFG) - prevent generator from "trying" too hard. Use positive values, 0 disables.', + ) + render_group.add_argument( + '--perlin', + default=0.0, + type=float, + help='Perlin noise scale (0.0 - 1.0) - add perlin noise to the initialization instead of the usual gaussian noise.', + ) render_group.add_argument( '--grid', '-g', @@ -725,7 +737,7 @@ def metadata_dumps(opt, # remove any image keys not mentioned in RFC #266 rfc266_img_fields = ['type','postprocessing','sampler','prompt','seed','variations','steps', - 'cfg_scale','step_number','width','height','extra','strength'] + 'cfg_scale','threshold','perlin','step_number','width','height','extra','strength'] rfc_dict ={} diff --git a/ldm/dream/readline.py b/ldm/dream/readline.py index 4bee51233f..d69f541ae6 100644 --- a/ldm/dream/readline.py +++ b/ldm/dream/readline.py @@ -32,6 +32,8 @@ COMMANDS = ( '--iterations','-n', '--width','-W','--height','-H', '--cfg_scale','-C', + '--threshold', + '--perlin', '--grid','-g', '--individual','-i', '--init_img','-I', diff --git a/ldm/generate.py b/ldm/generate.py index a203adb867..7df03c2689 100644 --- a/ldm/generate.py +++ b/ldm/generate.py @@ -361,7 +361,7 @@ class Generate: ), '-v --variation_amount must be in [0.0, 1.0]' assert ( 0.0 <= perlin <= 1.0 - ), '-v --perlin must be in [0.0, 1.0]' + ), '--perlin must be in [0.0, 1.0]' assert ( (embiggen == None and embiggen_tiles == None) or ( (embiggen != None or embiggen_tiles != None) and init_img != None) diff --git a/server/models.py b/server/models.py index fc4a5f41c4..1a574aa137 100644 --- a/server/models.py +++ b/server/models.py @@ -31,6 +31,8 @@ class DreamBase(): width: int = 512 height: int = 512 cfg_scale: float = 7.5 + threshold: float = 0.0 + perlin: float = 0.0 sampler_name: string = 'klms' seamless: bool = False model: str = None # The model to use (currently unused) @@ -83,6 +85,8 @@ class DreamBase(): self.width = int(j.get('width')) self.height = int(j.get('height')) self.cfg_scale = float(j.get('cfgscale') or j.get('cfg_scale')) + self.threshold = float(j.get('threshold')) + self.perlin = float(j.get('perlin')) self.sampler_name = j.get('sampler') or j.get('sampler_name') # model: str = None # The model to use (currently unused) # embeddings = None # The embeddings to use (currently unused) diff --git a/server/services.py b/server/services.py index 444f47cccf..93bbe1d240 100644 --- a/server/services.py +++ b/server/services.py @@ -363,6 +363,8 @@ class GeneratorService: fit = None if init_img is None else jobRequest.fit, iterations = jobRequest.iterations, cfg_scale = jobRequest.cfg_scale, + threshold = jobRequest.threshold, + perlin = jobRequest.perlin, width = jobRequest.width, height = jobRequest.height, seed = jobRequest.seed,