main
Haoming 2024-12-27 17:25:16 +08:00
parent dbccad2215
commit f01838eb9b
6 changed files with 69 additions and 15 deletions

View File

@ -25,7 +25,7 @@ Sometimes, when you type too fast or copy prompts from all over the places, you
- [x] Toggle between auto formatting and manual formatting - [x] Toggle between auto formatting and manual formatting
- In `Auto` mode: The process is ran whenever you click on **Generate** - In `Auto` mode: The process is ran whenever you click on **Generate**
- In `Manual` mode: The process is only ran when you click the **Format** button - In `Manual` mode: The process is only ran when you click the **Format** button
- [x] **New:** Trigger the formatting when pasting text - [x] **New:** Trigger the formatting on the pasted text
- [x] Toggle whether the above features are enabled / disabled by default in the `Prompt Format` section under the <ins>System</ins> category of the **Settings** tab - [x] Toggle whether the above features are enabled / disabled by default in the `Prompt Format` section under the <ins>System</ins> category of the **Settings** tab
- [x] Pressing `Alt` + `Shift` + `F` can also trigger formatting - [x] Pressing `Alt` + `Shift` + `F` can also trigger formatting
- [x] Assign "[alias](#tag-alias)" that counts as duplicates for the specified tags - [x] Assign "[alias](#tag-alias)" that counts as duplicates for the specified tags
@ -58,3 +58,15 @@ Sometimes, when you type too fast or copy prompts from all over the places, you
1. Since the formatting in `Auto` mode is triggered at the same time as the generation, the immediate image might not have its prompts updated. 1. Since the formatting in `Auto` mode is triggered at the same time as the generation, the immediate image might not have its prompts updated.
2. Some Extensions *(**eg.** [tagcomplete](https://github.com/DominikDoom/a1111-sd-webui-tagcomplete))* listen to the text editing event, meaning the formatting will cause them to be triggered. You can disable updating the actual prompts in the `Prompt Format` settings to prevent this. Though you may need to manually type something else for the prompt to get actually updated. 2. Some Extensions *(**eg.** [tagcomplete](https://github.com/DominikDoom/a1111-sd-webui-tagcomplete))* listen to the text editing event, meaning the formatting will cause them to be triggered. You can disable updating the actual prompts in the `Prompt Format` settings to prevent this. Though you may need to manually type something else for the prompt to get actually updated.
<hr>
<details>
<summary><b>Booru</b></summary>
- [x] Automatically clean up unwanted texts
- Structure is based on [gelbooru](https://gelbooru.com/)
<p align="center"><img src="booru.png" width=512></p>
</details>

View File

@ -25,7 +25,7 @@
- [x] 按下`Auto Format`以在手動與自動間切換 - [x] 按下`Auto Format`以在手動與自動間切換
- `自動`: 每次按下 **生成 (Generate)** 時處裡 - `自動`: 每次按下 **生成 (Generate)** 時處裡
- `手動`: 手動按下 **Format** 時才處裡 - `手動`: 手動按下 **Format** 時才處裡
- [x] **新功能:** 處裡貼上的咒語 - [x] **新功能:** 對貼上的咒語進行處裡
- [x] 在 **Settings** 頁面 <ins>System</ins> 下的 `Prompt Format` 區可以 開啟/關閉 上述功能 - [x] 在 **Settings** 頁面 <ins>System</ins> 下的 `Prompt Format` 區可以 開啟/關閉 上述功能
- [x] 按下 `Alt` + `Shift` + `F` 亦可觸發格式化 - [x] 按下 `Alt` + `Shift` + `F` 亦可觸發格式化
- [x] 為指定單字新增 "[同義詞](#同義詞)" - [x] 為指定單字新增 "[同義詞](#同義詞)"
@ -58,3 +58,15 @@
1. 由於 `自動`校正 和 生成 是同時觸發,當下所生產的第一張圖片之咒語可能不會是已更新的。 1. 由於 `自動`校正 和 生成 是同時觸發,當下所生產的第一張圖片之咒語可能不會是已更新的。
2. 有些擴充 *(如. [tagcomplete](https://github.com/DominikDoom/a1111-sd-webui-tagcomplete))* 追蹤文字的編輯事件,意即文字校正會導致它們啟動。你可以到設定關閉咒語的自動更新。 2. 有些擴充 *(如. [tagcomplete](https://github.com/DominikDoom/a1111-sd-webui-tagcomplete))* 追蹤文字的編輯事件,意即文字校正會導致它們啟動。你可以到設定關閉咒語的自動更新。
<hr>
<details>
<summary><b>Booru</b></summary>
- [x] 自動清除多餘字詞
- 文字結構基於 [gelbooru](https://gelbooru.com/)
<p align="center"><img src="booru.png" width=512></p>
</details>

BIN
booru.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -7,6 +7,8 @@ class pfConfigs {
this.removeUnderscore = this.#defaultRemoveUnderscore(); this.removeUnderscore = this.#defaultRemoveUnderscore();
this.comma = this.#appendComma(); this.comma = this.#appendComma();
this.paste = this.#onpaste(); this.paste = this.#onpaste();
this.booru = this.#procBooru();
this.promptFields = this.#getPromptFields(); this.promptFields = this.#getPromptFields();
} }
@ -46,6 +48,12 @@ class pfConfigs {
return config.checked; return config.checked;
} }
/** @returns {boolean} */
#procBooru() {
const config = document.getElementById('setting_pf_booru').querySelector('input[type=checkbox]');
return config.checked;
}
/** /**
* Cache All Prompt Fields * Cache All Prompt Fields
* @returns {HTMLTextAreaElement[]} * @returns {HTMLTextAreaElement[]}

View File

@ -51,6 +51,9 @@ class LeFormatter {
/** @param {string} input @param {boolean} dedupe @param {boolean} removeUnderscore @returns {string} */ /** @param {string} input @param {boolean} dedupe @param {boolean} removeUnderscore @returns {string} */
static formatString(input, dedupe, removeUnderscore) { static formatString(input, dedupe, removeUnderscore) {
// Remove Underscore
input = removeUnderscore ? this.#removeUnderscore(input) : input;
// Fix Commas inside Brackets // Fix Commas inside Brackets
input = input input = input
.replace(/[,\s]+\)/g, '),') .replace(/[,\s]+\)/g, '),')
@ -72,9 +75,6 @@ class LeFormatter {
.replace(/\s*\|\s*/g, '|') .replace(/\s*\|\s*/g, '|')
.replace(/\s*\:\s*/g, ':'); .replace(/\s*\:\s*/g, ':');
// Remove Underscore
input = removeUnderscore ? this.#removeUnderscore(input) : input;
// Sentence -> Tags // Sentence -> Tags
let tags = input.split(',').map(word => word.trim()); let tags = input.split(',').map(word => word.trim());
@ -146,7 +146,6 @@ class LeFormatter {
if (/^\s+$/.test(part)) if (/^\s+$/.test(part))
return part; return part;
part = part.trim();
if (!this.#cachedCards.includes(part)) if (!this.#cachedCards.includes(part))
part = part.replaceAll('_', ' '); part = part.replaceAll('_', ' ');
@ -220,6 +219,16 @@ onUiLoaded(() => {
event.preventDefault(); event.preventDefault();
let paste = (event.clipboardData || window.clipboardData).getData('text'); let paste = (event.clipboardData || window.clipboardData).getData('text');
if (config.booru) {
paste = paste.replace(/\s\d+|\?\s+/g, ", ");
for (const excl of ["Artist", "Character", "Copyright", "Tag"])
paste = paste.replace(excl, "");
paste = paste.replaceAll("(", "\\(");
paste = paste.replaceAll(")", "\\)");
}
paste = LeFormatter.formatString(paste, config.dedupe, config.removeUnderscore); paste = LeFormatter.formatString(paste, config.dedupe, config.removeUnderscore);
const currentText = field.value; const currentText = field.value;

View File

@ -9,9 +9,13 @@ def on_settings():
opts.add_option( opts.add_option(
"pf_disableupdateinput", "pf_disableupdateinput",
OptionInfo(False, "Disable the automatic updates of the prompts", **args).info( OptionInfo(False, "Disable the automatic updates of the prompts", **args)
'enable this if you have Extensions, such as <a href="https://github.com/DominikDoom/a1111-sd-webui-tagcomplete">tagcomplete</a>, that subscribe to text editing events' .info(
), """enable this if you have Extensions, such as
<a href="https://github.com/DominikDoom/a1111-sd-webui-tagcomplete">tagcomplete</a>,
that subscribe to text editing events"""
)
.needs_reload_ui(),
) )
opts.add_option( opts.add_option(
@ -31,14 +35,14 @@ def on_settings():
opts.add_option( opts.add_option(
"pf_appendcomma", "pf_appendcomma",
OptionInfo(True, "Append a comma at the end of each line", **args).info( OptionInfo(True, "Append a comma at the end of each line", **args)
"only active when there are multiple lines" .info("only take effect when there are multiple lines")
), .needs_reload_ui(),
) )
opts.add_option( opts.add_option(
"pf_onpaste", "pf_onpaste",
OptionInfo(False, "Trigger a Format when pasting text", **args), OptionInfo(False, "Format the pasted text", **args).needs_reload_ui(),
) )
opts.add_option( opts.add_option(
@ -52,7 +56,7 @@ def on_settings():
"max_lines": 1, "max_lines": 1,
"lines": 1, "lines": 1,
}, },
**args **args,
), ),
) )
@ -67,7 +71,7 @@ def on_settings():
"max_lines": 16, "max_lines": 16,
"lines": 4, "lines": 4,
}, },
**args **args,
) )
.link("RegExr", "https://regexr.com/") .link("RegExr", "https://regexr.com/")
.info( .info(
@ -77,5 +81,14 @@ def on_settings():
), ),
) )
opts.add_option(
"pf_booru",
OptionInfo(
False,
'Process the "Booru Structure"',
**args,
).info("requires format on paste) (<b>Experimental</b>"),
)
on_ui_settings(on_settings) on_ui_settings(on_settings)