Update index.js to use ADetailer in Auto1111/Forge/Vlad added events, listener, and function for ADetailer/aiFaceDetailer. Rewrote function generateAutoImage to allow for tacking on of alwayson_scripts (maybe redo for a textbox/json later for other Auto1111 extensions?) paired with settings.html edits

2689025ec38c5d797709f09b050751e422480759

error-usernotavailable <anonymoususernotavailable@gmail.com>

Signed
1 files changed, +56 -31Ignore whitespace
public/scripts/extensions/stable-diffusion/index.js+56 -31
@@ -219,6 +219,7 @@ const defaultSettings = {
219219 // Automatic1111/Horde exclusives
220220 restore_faces: false,
221221 enable_hr: false,
222+ aiFaceDetailer: false,
222223
223224 // Horde settings
224225 horde: false,
@@ -435,6 +436,7 @@ async function loadSettings() {
435436 $('#sd_horde_sanitize').prop('checked', extension_settings.sd.horde_sanitize);
436437 $('#sd_restore_faces').prop('checked', extension_settings.sd.restore_faces);
437438 $('#sd_enable_hr').prop('checked', extension_settings.sd.enable_hr);
439+ $('#sd_aiFaceDetailer').prop('checked', extension_settings.sd.aiFaceDetailer);
438440 $('#sd_refine_mode').prop('checked', extension_settings.sd.refine_mode);
439441 $('#sd_multimodal_captioning').prop('checked', extension_settings.sd.multimodal_captioning);
440442 $('#sd_auto_url').val(extension_settings.sd.auto_url);
@@ -853,6 +855,11 @@ function onSamplerChange() {
853855 saveSettingsDebounced();
854856}
855857
858+function onAiFaceDetailerChange() {
859+ extension_settings.sd.aiFaceDetailer = $('#sd_aiFaceDetailer').prop('checked');
860+ saveSettingsDebounced();
861+}
862+
856863const resolutionOptions = {
857864 sd_res_512x512: { width: 512, height: 512, name: '512x512 (1:1, icons, profile pictures)' },
858865 sd_res_600x600: { width: 600, height: 600, name: '600x600 (1:1, icons, profile pictures)' },
@@ -2920,42 +2927,59 @@ async function generateHordeImage(prompt, negativePrompt, signal) {
29202927 */
29212928async function generateAutoImage(prompt, negativePrompt, signal) {
29222929 const isValidVae = extension_settings.sd.vae && !['N/A', placeholderVae].includes(extension_settings.sd.vae);
2930+ let payload = {
2931+ ...getSdRequestBody(),
2932+ prompt: prompt,
2933+ negative_prompt: negativePrompt,
2934+ sampler_name: extension_settings.sd.sampler,
2935+ scheduler: extension_settings.sd.scheduler,
2936+ steps: extension_settings.sd.steps,
2937+ cfg_scale: extension_settings.sd.scale,
2938+ width: extension_settings.sd.width,
2939+ height: extension_settings.sd.height,
2940+ restore_faces: !!extension_settings.sd.restore_faces,
2941+ enable_hr: !!extension_settings.sd.enable_hr,
2942+ hr_upscaler: extension_settings.sd.hr_upscaler,
2943+ hr_scale: extension_settings.sd.hr_scale,
2944+ denoising_strength: extension_settings.sd.denoising_strength,
2945+ hr_second_pass_steps: extension_settings.sd.hr_second_pass_steps,
2946+ seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
2947+ override_settings: {
2948+ CLIP_stop_at_last_layers: extension_settings.sd.clip_skip,
2949+ sd_vae: isValidVae ? extension_settings.sd.vae : undefined,
2950+ },
2951+ override_settings_restore_afterwards: true,
2952+ clip_skip: extension_settings.sd.clip_skip, // For SD.Next
2953+ save_images: true,
2954+ send_images: true,
2955+ do_not_save_grid: false,
2956+ do_not_save_samples: false,
2957+ };
2958+ // Conditionally add the ADetailer if aiFaceDetailer is enabled
2959+ console.log('extension_settings.sd.aiFaceDetailer:', extension_settings.sd.aiFaceDetailer);
2960+ if (extension_settings.sd.aiFaceDetailer) {
2961+ payload.alwayson_scripts = {
2962+ ADetailer: {
2963+ args: [
2964+ true, // ad_enable
2965+ true, // skip_img2img
2966+ {
2967+ "ad_model": "face_yolov8n.pt"
2968+ }
2969+ ]
2970+ }
2971+ };
2972+ }
2973+
2974+ // Make the fetch call with the payload
29232975 const result = await fetch('/api/sd/generate', {
29242976 method: 'POST',
29252977 headers: getRequestHeaders(),
29262978 signal: signal,
29272979 body: JSON.stringify({payload),
2928- ...getSdRequestBody(),
2929- prompt: prompt,
2930- negative_prompt: negativePrompt,
2931- sampler_name: extension_settings.sd.sampler,
2932- scheduler: extension_settings.sd.scheduler,
2933- steps: extension_settings.sd.steps,
2934- cfg_scale: extension_settings.sd.scale,
2935- width: extension_settings.sd.width,
2936- height: extension_settings.sd.height,
2937- restore_faces: !!extension_settings.sd.restore_faces,
2938- enable_hr: !!extension_settings.sd.enable_hr,
2939- hr_upscaler: extension_settings.sd.hr_upscaler,
2940- hr_scale: extension_settings.sd.hr_scale,
2941- denoising_strength: extension_settings.sd.denoising_strength,
2942- hr_second_pass_steps: extension_settings.sd.hr_second_pass_steps,
2943- seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
2944- // For AUTO1111
2945- override_settings: {
2946- CLIP_stop_at_last_layers: extension_settings.sd.clip_skip,
2947- sd_vae: isValidVae ? extension_settings.sd.vae : undefined,
2948- },
2949- override_settings_restore_afterwards: true,
2950- // For SD.Next
2951- clip_skip: extension_settings.sd.clip_skip,
2952- // Ensure generated img is saved to disk
2953- save_images: true,
2954- send_images: true,
2955- do_not_save_grid: false,
2956- do_not_save_samples: false,
2957- }),
29582980 });
2981+
2982+
29592983
29602984 if (result.ok) {
29612985 const data = await result.json();
@@ -4186,6 +4210,7 @@ jQuery(async () => {
41864210 $('#sd_horde_sanitize').on('input', onHordeSanitizeInput);
41874211 $('#sd_restore_faces').on('input', onRestoreFacesInput);
41884212 $('#sd_enable_hr').on('input', onHighResFixInput);
4213+ $('#sd_aiFaceDetailer').on('change', onAiFaceDetailerChange);
41894214 $('#sd_refine_mode').on('input', onRefineModeInput);
41904215 $('#sd_character_prompt').on('input', onCharacterPromptInput);
41914216 $('#sd_character_negative_prompt').on('input', onCharacterNegativePromptInput);