P01yH3dr0n commited on
Commit
b3cf1cf
1 Parent(s): cea8836

adaptive scheduler and new option

Browse files
Files changed (3) hide show
  1. app.py +31 -19
  2. pnginfo.py +6 -5
  3. utils.py +2 -0
app.py CHANGED
@@ -24,8 +24,18 @@ def get_count():
24
  today_count = 0
25
  return today_count
26
 
 
 
 
 
 
 
 
 
 
 
27
  def control_ui():
28
- prompt = gr.TextArea(value="{breast expansion},{gigantic breasts},[artist:ningen_mame],artist:ciloranko,[artist:sho_(sho_lwlw)],[artist:foifoi (marfoyfoyfoy)],1girl,skinny,narrow waist,loli,", elem_id='txt2img_prompt', label="提示词", lines=3)
29
  quality_tags = gr.TextArea(
30
  elem_id='txt2img_qua_prompt', label="质量词", lines=1,
31
  value=client_config['default_quality'],
@@ -40,14 +50,14 @@ def control_ui():
40
  with gr.Row():
41
  sampler = gr.Dropdown(
42
  choices=[
43
- "k_euler", "k_euler_ancestral", "k_dpmpp_2s_ancestral",
44
  "k_dpmpp_2m", "k_dpmpp_sde", "ddim_v3"
45
  ],
46
  value="k_euler",
47
  label="采样器",
48
  interactive=True
49
  )
50
- scale = gr.Slider(label="CFG Scale", value=5.0, minimum=1, maximum=10, step=0.1)
51
  steps = gr.Slider(label="步数", value=28, minimum=1, maximum=50, step=1)
52
  with gr.Row():
53
  seed = gr.Number(label="种子", value=-1, step=1, maximum=2**32-1, minimum=-1, scale=3)
@@ -100,32 +110,34 @@ def control_ui():
100
  choices=[
101
  "native", "karras", "exponential", "polyexponential"
102
  ],
103
- value="native",
104
  label="Scheduler",
105
  interactive=True
106
  )
107
  with gr.Row():
108
  smea = gr.Checkbox(False, label="SMEA")
109
  dyn = gr.Checkbox(False, label="SMEA DYN")
 
110
  with gr.Row():
111
- dyn_threshold = gr.Checkbox(False, label="Dynamic Thresholding")
112
  cfg_rescale = gr.Slider(0, 1, 0, step=0.01, label="CFG rescale")
113
  with gr.Column():
114
  save = gr.Checkbox(value=True, label='云端保存图片')
115
  gen_btn = gr.Button(value="生成", variant="primary")
116
  stop_btn = gr.Button(value="取消", variant="stop", visible=False)
 
117
  rand_seed.click(fn=lambda: -1, inputs=None, outputs=seed)
118
  i2i.select(lambda: 'i2i', inputs=None, outputs=selection)
119
  inp.select(lambda: 'inp', inputs=None, outputs=selection)
120
- return gen_btn, stop_btn, [prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, ref_images, info_extracts, ref_strs, i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection], [save, rand_seed, reuse_seed, reuse_img_i2i, reuse_img_inp, vibe_tab, i2i_tab]
121
 
122
- def generate(prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, ref_images, info_extracts, ref_strs, i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection):
123
  global today_count
124
  set_token(os.environ.get('token'))
125
  img_data, payload = generate_novelai_image(
126
  f"{prompt}, {quality_tags}", neg_prompt, seed, scale,
127
  width, height, steps, sampler, scheduler,
128
- smea, dyn, dyn_threshold, cfg_rescale, ref_images, info_extracts, ref_strs,
129
  i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection
130
  )
131
  if not isinstance(img_data, bytes):
@@ -176,7 +188,7 @@ def main_ui():
176
  gen_btn, stop_btn, paras, others = control_ui()
177
  with gr.Column():
178
  image, info, send_dtool = preview_ui()
179
- cost_list = paras[5:8] + paras[10:12] + paras[17:19] + paras[21:23]
180
  for component in cost_list:
181
  component.change(update_btn_cost, inputs=cost_list, outputs=gen_btn)
182
  gen = gen_btn.click(lambda: (gr.Button(visible=False), gr.Button(visible=True)), inputs=None, outputs=[gen_btn, stop_btn]).then(
@@ -184,8 +196,8 @@ def main_ui():
184
  rename_save_img, inputs=[image, info, others[0]], outputs=image, trigger_mode="once").then(
185
  lambda: (gr.Button(visible=True), gr.Button(visible=False)), inputs=None, outputs=[gen_btn, stop_btn])
186
  others[2].click(lambda o, s: o if len(s) == 0 else s['parameters']['seed'], inputs=[paras[3], info], outputs=paras[3])
187
- others[3].click(lambda i: i, inputs=image, outputs=paras[17])
188
- others[4].click(lambda i: gr.ImageEditor(value=i), inputs=image, outputs=paras[21])
189
  stop_btn.click(lambda: (gr.Button(visible=True), gr.Button(visible=False)), inputs=None, outputs=[gen_btn, stop_btn], cancels=[gen])
190
  return image, paras, others, send_dtool
191
 
@@ -255,16 +267,16 @@ def ui():
255
  loadTagComplete.click(fn=None, js="() => {document.getElementById('client_ui_main-button').click();run();}")
256
  clearTagCache = gr.Button(value="清除tag补全缓存")
257
  clearTagCache.click(fn=None, js="() => {localStorage.clear();}")
258
- send_and_jump(png2main, send_paras, [png_items] + paras[:14], paras[:14], "client_ui_main", read_image)
259
- send_and_jump(gal2main, send_paras, [gal_items] + paras[:14], paras[:14], "client_ui_main", gal_items)
260
  from_t2i.click(lambda x: x, inputs=image, outputs=in_image)
261
- send_jump_select(send_i2i, send_outputs, [out_image, d_index], paras[17], "client_ui_main", others[6], out_image, "i2i_block")
262
- send_jump_select(send_inp, send_outputs, [out_image, d_index], paras[21], "client_ui_main", others[6], out_image, "inp_block")
263
- send_jump_select(send_vib, (lambda l, i: l if i == -1 else [l[i]]), [out_image, d_index], paras[14], "client_ui_main", others[5], out_image)
264
  send_and_jump(send_dtool, (lambda x: x), image, in_image, "client_ui_dtool", image)
265
- send_jump_select(history2i2i, send_outputs, [gallery, h_index], paras[17], "client_ui_main", others[6], gal_items, "i2i_block")
266
- send_jump_select(history2inp, send_outputs, [gallery, h_index], paras[21], "client_ui_main", others[6], gal_items, "inp_block")
267
- send_jump_select(history2ref, (lambda l, i: None if i == -1 else [l[i]]), [gallery, h_index], paras[14], "client_ui_main", others[5], gal_items)
268
  send_and_jump(history2dtl, send_outputs, [gallery, h_index], in_image, "client_ui_dtool", gal_items)
269
  read_image.change(read_info_from_image, inputs=read_image, outputs=[info, png_items])
270
  return website
 
24
  today_count = 0
25
  return today_count
26
 
27
+ def change_schedule(sampler):
28
+ if sampler == "ddim_v3":
29
+ return gr.Dropdown(value="native", interactive=False)
30
+ elif sampler == "k_euler_ancestral":
31
+ return gr.Dropdown(value="native", interactive=True)
32
+ elif sampler == "k_dpmpp_2m":
33
+ return gr.Dropdown(value="exponential", interactive=True)
34
+ else:
35
+ return gr.Dropdown(value="karras", interactive=True)
36
+
37
  def control_ui():
38
+ prompt = gr.TextArea(value="{breast expansion},{gigantic breasts},[artist:ningen_mame],artist:ciloranko,[artist:sho_(sho_lwlw)],[artist:foifoi (marfoyfoyfoy)],1girl,skinny,narrow waist,loli,child,solo,", elem_id='txt2img_prompt', label="提示词", lines=3)
39
  quality_tags = gr.TextArea(
40
  elem_id='txt2img_qua_prompt', label="质量词", lines=1,
41
  value=client_config['default_quality'],
 
50
  with gr.Row():
51
  sampler = gr.Dropdown(
52
  choices=[
53
+ "k_euler", "k_euler_ancestral", "k_dpmpp_2s_ancestral", "k_dpmpp_2m_sde",
54
  "k_dpmpp_2m", "k_dpmpp_sde", "ddim_v3"
55
  ],
56
  value="k_euler",
57
  label="采样器",
58
  interactive=True
59
  )
60
+ scale = gr.Slider(label="CFG Scale", value=5.0, minimum=0, maximum=10, step=0.1)
61
  steps = gr.Slider(label="步数", value=28, minimum=1, maximum=50, step=1)
62
  with gr.Row():
63
  seed = gr.Number(label="种子", value=-1, step=1, maximum=2**32-1, minimum=-1, scale=3)
 
110
  choices=[
111
  "native", "karras", "exponential", "polyexponential"
112
  ],
113
+ value="karras",
114
  label="Scheduler",
115
  interactive=True
116
  )
117
  with gr.Row():
118
  smea = gr.Checkbox(False, label="SMEA")
119
  dyn = gr.Checkbox(False, label="SMEA DYN")
120
+ variety = gr.Checkbox(False, label="Variety+")
121
  with gr.Row():
122
+ dyn_threshold = gr.Checkbox(False, label="Decrisp")
123
  cfg_rescale = gr.Slider(0, 1, 0, step=0.01, label="CFG rescale")
124
  with gr.Column():
125
  save = gr.Checkbox(value=True, label='云端保存图片')
126
  gen_btn = gr.Button(value="生成", variant="primary")
127
  stop_btn = gr.Button(value="取消", variant="stop", visible=False)
128
+ sampler.change(change_schedule, sampler, scheduler)
129
  rand_seed.click(fn=lambda: -1, inputs=None, outputs=seed)
130
  i2i.select(lambda: 'i2i', inputs=None, outputs=selection)
131
  inp.select(lambda: 'inp', inputs=None, outputs=selection)
132
+ return gen_btn, stop_btn, [prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety, ref_images, info_extracts, ref_strs, i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection], [save, rand_seed, reuse_seed, reuse_img_i2i, reuse_img_inp, vibe_tab, i2i_tab]
133
 
134
+ def generate(prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety, ref_images, info_extracts, ref_strs, i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection):
135
  global today_count
136
  set_token(os.environ.get('token'))
137
  img_data, payload = generate_novelai_image(
138
  f"{prompt}, {quality_tags}", neg_prompt, seed, scale,
139
  width, height, steps, sampler, scheduler,
140
+ smea, dyn, dyn_threshold, cfg_rescale, variety, ref_images, info_extracts, ref_strs,
141
  i2i_image, i2i_str, i2i_noise, overlay, inp_img, selection
142
  )
143
  if not isinstance(img_data, bytes):
 
188
  gen_btn, stop_btn, paras, others = control_ui()
189
  with gr.Column():
190
  image, info, send_dtool = preview_ui()
191
+ cost_list = paras[5:8] + paras[10:12] + paras[18:20] + paras[22:24]
192
  for component in cost_list:
193
  component.change(update_btn_cost, inputs=cost_list, outputs=gen_btn)
194
  gen = gen_btn.click(lambda: (gr.Button(visible=False), gr.Button(visible=True)), inputs=None, outputs=[gen_btn, stop_btn]).then(
 
196
  rename_save_img, inputs=[image, info, others[0]], outputs=image, trigger_mode="once").then(
197
  lambda: (gr.Button(visible=True), gr.Button(visible=False)), inputs=None, outputs=[gen_btn, stop_btn])
198
  others[2].click(lambda o, s: o if len(s) == 0 else s['parameters']['seed'], inputs=[paras[3], info], outputs=paras[3])
199
+ others[3].click(lambda i: i, inputs=image, outputs=paras[18])
200
+ others[4].click(lambda i: gr.ImageEditor(value=i), inputs=image, outputs=paras[22])
201
  stop_btn.click(lambda: (gr.Button(visible=True), gr.Button(visible=False)), inputs=None, outputs=[gen_btn, stop_btn], cancels=[gen])
202
  return image, paras, others, send_dtool
203
 
 
267
  loadTagComplete.click(fn=None, js="() => {document.getElementById('client_ui_main-button').click();run();}")
268
  clearTagCache = gr.Button(value="清除tag补全缓存")
269
  clearTagCache.click(fn=None, js="() => {localStorage.clear();}")
270
+ send_and_jump(png2main, send_paras, [png_items] + paras[:15], paras[:15], "client_ui_main", read_image)
271
+ send_and_jump(gal2main, send_paras, [gal_items] + paras[:15], paras[:15], "client_ui_main", gal_items)
272
  from_t2i.click(lambda x: x, inputs=image, outputs=in_image)
273
+ send_jump_select(send_i2i, send_outputs, [out_image, d_index], paras[18], "client_ui_main", others[6], out_image, "i2i_block")
274
+ send_jump_select(send_inp, send_outputs, [out_image, d_index], paras[22], "client_ui_main", others[6], out_image, "inp_block")
275
+ send_jump_select(send_vib, (lambda l, i: l if i == -1 else [l[i]]), [out_image, d_index], paras[15], "client_ui_main", others[5], out_image)
276
  send_and_jump(send_dtool, (lambda x: x), image, in_image, "client_ui_dtool", image)
277
+ send_jump_select(history2i2i, send_outputs, [gallery, h_index], paras[18], "client_ui_main", others[6], gal_items, "i2i_block")
278
+ send_jump_select(history2inp, send_outputs, [gallery, h_index], paras[22], "client_ui_main", others[6], gal_items, "inp_block")
279
+ send_jump_select(history2ref, (lambda l, i: None if i == -1 else [l[i]]), [gallery, h_index], paras[15], "client_ui_main", others[5], gal_items)
280
  send_and_jump(history2dtl, send_outputs, [gallery, h_index], in_image, "client_ui_dtool", gal_items)
281
  read_image.change(read_info_from_image, inputs=read_image, outputs=[info, png_items])
282
  return website
pnginfo.py CHANGED
@@ -103,13 +103,14 @@ Steps: {json_info["steps"]}, Sampler: {json_info['sampler']}, CFG scale: {json_i
103
  def send_paras(*args):
104
  if len(args[0]) == 0:
105
  return args[1:]
106
- items, prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale = args
107
- paras = [prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale]
108
- for i, keys in enumerate([('prompt',), ('',), ('uc', 'negative prompt'), ('seed',), ('scale', 'cfg scale'), ('width', 'size-1'), ('height', 'size-2'), ('steps',), ('sampler',), ('noise_schedule',), ('sm',), ('sm_dyn',), ('dynamic_thresholding',), ('cfg_rescale',)]):
109
  for key in keys:
110
  if key in items:
111
  paras[i] = items[key]
112
- prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale = paras
 
113
  if prompt.endswith(', ' + quality_tags):
114
  prompt = prompt[:-(len(quality_tags) + 2)]
115
- return prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale
 
103
  def send_paras(*args):
104
  if len(args[0]) == 0:
105
  return args[1:]
106
+ items, prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety = args
107
+ paras = [prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety]
108
+ for i, keys in enumerate([('prompt',), ('',), ('uc', 'negative prompt'), ('seed',), ('scale', 'cfg scale'), ('width', 'size-1'), ('height', 'size-2'), ('steps',), ('sampler',), ('noise_schedule',), ('sm',), ('sm_dyn',), ('dynamic_thresholding',), ('cfg_rescale',), ('skip_cfg_above_sigma',)]):
109
  for key in keys:
110
  if key in items:
111
  paras[i] = items[key]
112
+ prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety = paras
113
+ variety = (variety != None) if 'skip_cfg_above_sigma' in items else variety
114
  if prompt.endswith(', ' + quality_tags):
115
  prompt = prompt[:-(len(quality_tags) + 2)]
116
+ return prompt, quality_tags, neg_prompt, seed, scale, width, height, steps, sampler, scheduler, smea, dyn, dyn_threshold, cfg_rescale, variety
utils.py CHANGED
@@ -57,6 +57,7 @@ def generate_novelai_image(
57
  dyn=False,
58
  dyn_threshold=False,
59
  cfg_rescale=0,
 
60
  ref_images=None,
61
  info_extracts=[],
62
  ref_strs=[],
@@ -98,6 +99,7 @@ def generate_novelai_image(
98
  "reference_information_extracted_multiple": info_extracts,
99
  "reference_strength_multiple": ref_strs,
100
  "seed": seed,
 
101
  "sm": smea,
102
  "sm_dyn": dyn,
103
  "uncond_scale": 1,
 
57
  dyn=False,
58
  dyn_threshold=False,
59
  cfg_rescale=0,
60
+ variety=None,
61
  ref_images=None,
62
  info_extracts=[],
63
  ref_strs=[],
 
99
  "reference_information_extracted_multiple": info_extracts,
100
  "reference_strength_multiple": ref_strs,
101
  "seed": seed,
102
+ "skip_cfg_above_sigma": None if variety is None else 19,
103
  "sm": smea,
104
  "sm_dyn": dyn,
105
  "uncond_scale": 1,