| 2920 | */ | 2927 | */ |
| 2921 | async function generateAutoImage(prompt, negativePrompt, signal) { | 2928 | async function generateAutoImage(prompt, negativePrompt, signal) { |
| 2922 | const isValidVae = extension_settings.sd.vae && !['N/A', placeholderVae].includes(extension_settings.sd.vae); | 2929 | 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 |
| 2923 | const result = await fetch('/api/sd/generate', { | 2975 | const result = await fetch('/api/sd/generate', { |
| 2924 | method: 'POST', | 2976 | method: 'POST', |
| 2925 | headers: getRequestHeaders(), | 2977 | headers: getRequestHeaders(), |
| 2926 | signal: signal, | 2978 | signal: signal, |
| 2927 | body: JSON.stringify({ | 2979 | 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 | }), | | |
| 2958 | }); | 2980 | }); |
| | 2981 | |
| | 2982 | |
| 2959 | | 2983 | |
| 2960 | if (result.ok) { | 2984 | if (result.ok) { |
| 2961 | const data = await result.json(); | 2985 | const data = await result.json(); |