Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
stable-diffusion-webui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
stable-diffusion-webui
Commits
fa4fe454
Unverified
Commit
fa4fe454
authored
Feb 01, 2023
by
AUTOMATIC1111
Committed by
GitHub
Feb 01, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7371 from hoblin/master
[Prompt Matrix] Support for negative prompt + delimiter selector
parents
814600f2
1e2b10d2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
11 deletions
+38
-11
prompt_matrix.py
scripts/prompt_matrix.py
+38
-11
No files found.
scripts/prompt_matrix.py
View file @
fa4fe454
...
@@ -44,16 +44,40 @@ class Script(scripts.Script):
...
@@ -44,16 +44,40 @@ class Script(scripts.Script):
def
title
(
self
):
def
title
(
self
):
return
"Prompt matrix"
return
"Prompt matrix"
def
ui
(
self
,
is_img2img
):
def
ui
(
self
,
is_img2img
):
put_at_start
=
gr
.
Checkbox
(
label
=
'Put variable parts at start of prompt'
,
value
=
False
,
elem_id
=
self
.
elem_id
(
"put_at_start"
))
gr
.
HTML
(
'<br />'
)
different_seeds
=
gr
.
Checkbox
(
label
=
'Use different seed for each picture'
,
value
=
False
,
elem_id
=
self
.
elem_id
(
"different_seeds"
))
with
gr
.
Row
():
with
gr
.
Column
():
return
[
put_at_start
,
different_seeds
]
put_at_start
=
gr
.
Checkbox
(
label
=
'Put variable parts at start of prompt'
,
value
=
False
,
elem_id
=
self
.
elem_id
(
"put_at_start"
))
def
run
(
self
,
p
,
put_at_start
,
different_seeds
):
with
gr
.
Column
():
# Radio buttons for selecting the prompt between positive and negative
prompt_type
=
gr
.
Radio
([
"positive"
,
"negative"
],
label
=
"Select prompt"
,
elem_id
=
self
.
elem_id
(
"prompt_type"
),
value
=
"positive"
)
with
gr
.
Row
():
with
gr
.
Column
():
different_seeds
=
gr
.
Checkbox
(
label
=
'Use different seed for each picture'
,
value
=
False
,
elem_id
=
self
.
elem_id
(
"different_seeds"
))
with
gr
.
Column
():
# Radio buttons for selecting the delimiter to use in the resulting prompt
variations_delimiter
=
gr
.
Radio
([
"comma"
,
"space"
],
label
=
"Select delimiter"
,
elem_id
=
self
.
elem_id
(
"variations_delimiter"
),
value
=
"comma"
)
return
[
put_at_start
,
different_seeds
,
prompt_type
,
variations_delimiter
]
def
run
(
self
,
p
,
put_at_start
,
different_seeds
,
prompt_type
,
variations_delimiter
):
modules
.
processing
.
fix_seed
(
p
)
modules
.
processing
.
fix_seed
(
p
)
# Raise error if promp type is not positive or negative
if
prompt_type
not
in
[
"positive"
,
"negative"
]:
raise
ValueError
(
f
"Unknown prompt type {prompt_type}"
)
# Raise error if variations delimiter is not comma or space
if
variations_delimiter
not
in
[
"comma"
,
"space"
]:
raise
ValueError
(
f
"Unknown variations delimiter {variations_delimiter}"
)
prompt
=
p
.
prompt
if
prompt_type
==
"positive"
else
p
.
negative_prompt
original_prompt
=
prompt
[
0
]
if
type
(
prompt
)
==
list
else
prompt
positive_prompt
=
p
.
prompt
[
0
]
if
type
(
p
.
prompt
)
==
list
else
p
.
prompt
original_prompt
=
p
.
prompt
[
0
]
if
type
(
p
.
prompt
)
==
list
else
p
.
prompt
delimiter
=
", "
if
variations_delimiter
==
"comma"
else
" "
all_prompts
=
[]
all_prompts
=
[]
prompt_matrix_parts
=
original_prompt
.
split
(
"|"
)
prompt_matrix_parts
=
original_prompt
.
split
(
"|"
)
...
@@ -66,16 +90,19 @@ class Script(scripts.Script):
...
@@ -66,16 +90,19 @@ class Script(scripts.Script):
else
:
else
:
selected_prompts
=
[
prompt_matrix_parts
[
0
]]
+
selected_prompts
selected_prompts
=
[
prompt_matrix_parts
[
0
]]
+
selected_prompts
all_prompts
.
append
(
", "
.
join
(
selected_prompts
))
all_prompts
.
append
(
delimiter
.
join
(
selected_prompts
))
p
.
n_iter
=
math
.
ceil
(
len
(
all_prompts
)
/
p
.
batch_size
)
p
.
n_iter
=
math
.
ceil
(
len
(
all_prompts
)
/
p
.
batch_size
)
p
.
do_not_save_grid
=
True
p
.
do_not_save_grid
=
True
print
(
f
"Prompt matrix will create {len(all_prompts)} images using a total of {p.n_iter} batches."
)
print
(
f
"Prompt matrix will create {len(all_prompts)} images using a total of {p.n_iter} batches."
)
p
.
prompt
=
all_prompts
if
prompt_type
==
"positive"
:
p
.
prompt
=
all_prompts
else
:
p
.
negative_prompt
=
all_prompts
p
.
seed
=
[
p
.
seed
+
(
i
if
different_seeds
else
0
)
for
i
in
range
(
len
(
all_prompts
))]
p
.
seed
=
[
p
.
seed
+
(
i
if
different_seeds
else
0
)
for
i
in
range
(
len
(
all_prompts
))]
p
.
prompt_for_display
=
original
_prompt
p
.
prompt_for_display
=
positive
_prompt
processed
=
process_images
(
p
)
processed
=
process_images
(
p
)
grid
=
images
.
image_grid
(
processed
.
images
,
p
.
batch_size
,
rows
=
1
<<
((
len
(
prompt_matrix_parts
)
-
1
)
//
2
))
grid
=
images
.
image_grid
(
processed
.
images
,
p
.
batch_size
,
rows
=
1
<<
((
len
(
prompt_matrix_parts
)
-
1
)
//
2
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment