mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Add SD seed control
This commit is contained in:
		@@ -185,6 +185,7 @@ const defaultSettings = {
 | 
			
		||||
    sampler: 'DDIM',
 | 
			
		||||
    model: '',
 | 
			
		||||
    vae: '',
 | 
			
		||||
    seed: -1,
 | 
			
		||||
 | 
			
		||||
    // Automatic1111/Horde exclusives
 | 
			
		||||
    restore_faces: false,
 | 
			
		||||
@@ -414,6 +415,7 @@ async function loadSettings() {
 | 
			
		||||
    $('#sd_snap').prop('checked', extension_settings.sd.snap);
 | 
			
		||||
    $('#sd_clip_skip').val(extension_settings.sd.clip_skip);
 | 
			
		||||
    $('#sd_clip_skip_value').text(extension_settings.sd.clip_skip);
 | 
			
		||||
    $('#sd_seed').val(extension_settings.sd.seed);
 | 
			
		||||
 | 
			
		||||
    for (const style of extension_settings.sd.styles) {
 | 
			
		||||
        const option = document.createElement('option');
 | 
			
		||||
@@ -707,6 +709,11 @@ function onClipSkipInput() {
 | 
			
		||||
    saveSettingsDebounced();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onSeedInput() {
 | 
			
		||||
    extension_settings.sd.seed = Number($('#sd_seed').val());
 | 
			
		||||
    saveSettingsDebounced();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onScaleInput() {
 | 
			
		||||
    extension_settings.sd.scale = Number($('#sd_scale').val());
 | 
			
		||||
    $('#sd_scale_value').text(extension_settings.sd.scale.toFixed(1));
 | 
			
		||||
@@ -2326,6 +2333,7 @@ async function generateTogetherAIImage(prompt, negativePrompt) {
 | 
			
		||||
            steps: extension_settings.sd.steps,
 | 
			
		||||
            width: extension_settings.sd.width,
 | 
			
		||||
            height: extension_settings.sd.height,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -2350,6 +2358,7 @@ async function generatePollinationsImage(prompt, negativePrompt) {
 | 
			
		||||
            height: extension_settings.sd.height,
 | 
			
		||||
            enhance: extension_settings.sd.pollinations_enhance,
 | 
			
		||||
            refine: extension_settings.sd.pollinations_refine,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -2392,6 +2401,7 @@ async function generateExtrasImage(prompt, negativePrompt) {
 | 
			
		||||
            hr_scale: extension_settings.sd.hr_scale,
 | 
			
		||||
            denoising_strength: extension_settings.sd.denoising_strength,
 | 
			
		||||
            hr_second_pass_steps: extension_settings.sd.hr_second_pass_steps,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -2429,6 +2439,7 @@ async function generateHordeImage(prompt, negativePrompt) {
 | 
			
		||||
            enable_hr: !!extension_settings.sd.enable_hr,
 | 
			
		||||
            sanitize: !!extension_settings.sd.horde_sanitize,
 | 
			
		||||
            clip_skip: extension_settings.sd.clip_skip,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -2467,6 +2478,7 @@ async function generateAutoImage(prompt, negativePrompt) {
 | 
			
		||||
            hr_scale: extension_settings.sd.hr_scale,
 | 
			
		||||
            denoising_strength: extension_settings.sd.denoising_strength,
 | 
			
		||||
            hr_second_pass_steps: extension_settings.sd.hr_second_pass_steps,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
            override_settings: {
 | 
			
		||||
                CLIP_stop_at_last_layers: extension_settings.sd.clip_skip,
 | 
			
		||||
            },
 | 
			
		||||
@@ -2513,6 +2525,7 @@ async function generateDrawthingsImage(prompt, negativePrompt) {
 | 
			
		||||
            denoising_strength: extension_settings.sd.denoising_strength,
 | 
			
		||||
            clip_skip: extension_settings.sd.clip_skip,
 | 
			
		||||
            upscaler_scale: extension_settings.sd.hr_scale,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
            // TODO: advanced API parameters: hr, upscaler
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
@@ -2552,6 +2565,7 @@ async function generateNovelImage(prompt, negativePrompt) {
 | 
			
		||||
            decrisper: extension_settings.sd.novel_decrisper,
 | 
			
		||||
            sm: sm,
 | 
			
		||||
            sm_dyn: sm_dyn,
 | 
			
		||||
            seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -2714,7 +2728,9 @@ async function generateComfyImage(prompt, negativePrompt) {
 | 
			
		||||
    }
 | 
			
		||||
    let workflow = (await workflowResponse.json()).replace('"%prompt%"', JSON.stringify(prompt));
 | 
			
		||||
    workflow = workflow.replace('"%negative_prompt%"', JSON.stringify(negativePrompt));
 | 
			
		||||
    workflow = workflow.replaceAll('"%seed%"', JSON.stringify(Math.round(Math.random() * Number.MAX_SAFE_INTEGER)));
 | 
			
		||||
 | 
			
		||||
    const seed = extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : Math.round(Math.random() * Number.MAX_SAFE_INTEGER);
 | 
			
		||||
    workflow = workflow.replaceAll('"%seed%"', JSON.stringify(seed));
 | 
			
		||||
    placeholders.forEach(ph => {
 | 
			
		||||
        workflow = workflow.replace(`"%${ph}%"`, JSON.stringify(extension_settings.sd[ph]));
 | 
			
		||||
    });
 | 
			
		||||
@@ -3212,6 +3228,7 @@ jQuery(async () => {
 | 
			
		||||
    $('#sd_multimodal_captioning').on('input', onMultimodalCaptioningInput);
 | 
			
		||||
    $('#sd_snap').on('input', onSnapInput);
 | 
			
		||||
    $('#sd_clip_skip').on('input', onClipSkipInput);
 | 
			
		||||
    $('#sd_seed').on('input', onSeedInput);
 | 
			
		||||
 | 
			
		||||
    $('.sd_settings .inline-drawer-toggle').on('click', function () {
 | 
			
		||||
        initScrollHeight($('#sd_prompt_prefix'));
 | 
			
		||||
 
 | 
			
		||||
@@ -260,6 +260,11 @@
 | 
			
		||||
                <label for="sd_novel_upscale_ratio"><span data-i18n="Upscale by">Upscale by</span> (<span id="sd_novel_upscale_ratio_value"></span>)</label>
 | 
			
		||||
                <input id="sd_novel_upscale_ratio" type="range" min="{{novel_upscale_ratio_min}}" max="{{novel_upscale_ratio_max}}" step="{{novel_upscale_ratio_step}}" value="{{novel_upscale_ratio}}" />
 | 
			
		||||
            </div>
 | 
			
		||||
            <div data-sd-source="novel,togetherai,pollinations,comfy,drawthings,vlad,auto,horde" class="marginTop5">
 | 
			
		||||
                <label for="sd_seed">Seed</label>
 | 
			
		||||
                <small>(-1 for random)</small>
 | 
			
		||||
                <input id="sd_seed" type="number" class="text_pole" min="-1" max="9999999999" step="1" />
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <h4  data-i18n="[title]Preset for prompt prefix and negative prompt" title="Preset for prompt prefix and negative prompt">
 | 
			
		||||
                <span data-i18n="Style">Style</span>
 | 
			
		||||
@@ -269,6 +274,9 @@
 | 
			
		||||
                <div id="sd_save_style" data-i18n="[title]Save style" title="Save style" class="menu_button">
 | 
			
		||||
                    <i class="fa-solid fa-save"></i>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div id="sd_delete_style" data-i18n="[title]Delete style" title="Delete style" class="menu_button">
 | 
			
		||||
                    <i class="fa-solid fa-trash-can"></i>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <label for="sd_prompt_prefix" data-i18n="Common prompt prefix">Common prompt prefix</label>
 | 
			
		||||
            <textarea id="sd_prompt_prefix" class="text_pole textarea_compact" rows="3" data-i18n="[placeholder]sd_prompt_prefix_placeholder" placeholder="Use {prompt} to specify where the generated prompt will be inserted"></textarea>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user