persist settings in localStorage, randomize every picture seed if using random seed (empty), consider empty seed as random => variance and allow multiple pictures without seed increment

master
Ondřej Hruška 6 days ago
parent e45df52272
commit 6379f43b22
  1. 13
      sd_pipeline.py
  2. 26
      templates/index.html

@ -83,7 +83,7 @@ class SDPipeline:
self.model_type = os.environ.get("SD_MODEL_TYPE", "sd15")
self.low_vram = os.environ.get("SD_LOW_VRAM", "").lower() in ("1", "true", "yes")
self.lora_stack = self._parse_lora_stack(os.environ.get("SD_LORA_STACK", ""))
self.quality_keywords = "hyper detail, Canon50, cinematic lighting, realistic, f/1.4, ISO 200, 1/160s, 8K, RAW, unedited"
self.quality_keywords = "hyper detail, cinematic lighting, realistic, unedited" #Canon50, f/1.4, ISO 200, 1/160s, 8K, RAW
def _parse_lora_stack(self, lora_env: str) -> list[tuple[str, float]]:
"""Parse SD_LORA_STACK env var into list of (path, weight) tuples.
@ -175,7 +175,6 @@ class SDPipeline:
if self.pipe is None:
self.load()
seed = options.seed if options.seed is not None else self._random_seed()
self._stop_requested = False
with self._generation_lock:
@ -184,7 +183,7 @@ class SDPipeline:
self._stop_requested = False
return
params = self._compute_params(options, seed, i)
params = self._compute_params(options, i)
full_prompt = f"{options.prompt}, {self.quality_keywords}" if options.add_quality_keywords else options.prompt
image = self._generate_image(full_prompt, options.negative_prompt, params, options.width, options.height)
@ -196,9 +195,13 @@ class SDPipeline:
result = self._save_and_encode(image, options, params, full_prompt, i)
yield result
def _compute_params(self, options: GenerationOptions, seed: int, index: int) -> ImageParams:
def _compute_params(self, options: GenerationOptions, index: int) -> ImageParams:
"""Compute generation parameters for a single image."""
current_seed = seed + index if options.increment_seed else seed
if options.seed is not None:
if options.increment_seed:
current_seed = options.seed + index
else:
current_seed = self._random_seed()
if options.vary_guidance and options.count > 1:
t = index / (options.count - 1)

@ -167,13 +167,6 @@
const guidanceValue = document.getElementById('guidance-value');
const randomSeedBtn = document.getElementById('random-seed');
const seedInput = document.getElementById('seed');
let timePerImage = null;
let progressInterval = null;
let imageStartTime = null;
let isGenerating = false;
let abortController = null;
const incrementSeedCheckbox = document.getElementById('increment-seed');
const varyGuidanceCheckbox = document.getElementById('vary-guidance');
const varyStepsCheckbox = document.getElementById('vary-steps');
@ -190,6 +183,12 @@
const varyGuidanceGroup = varyGuidanceCheckbox.closest('.form-group');
const varyStepsGroup = varyStepsCheckbox.closest('.form-group');
let timePerImage = null;
let progressInterval = null;
let imageStartTime = null;
let isGenerating = false;
let abortController = null;
function updateVaryOptionsVisibility() {
const count = parseInt(countInput.value) || 1;
const showVary = count > 1;
@ -221,7 +220,7 @@
});
randomSeedBtn.addEventListener('click', () => {
seedInput.value = Math.floor(100000000 + Math.random() * 900000000);
seedInput.value = '';
});
document.getElementById('prompt').addEventListener('keydown', (e) => {
@ -470,13 +469,15 @@
let requestedCount = parseInt(document.getElementById('count').value);
// If count > 1 but no vary options enabled, reduce to 1
const hasVaryOption = incrementSeedCheckbox.checked || varyGuidanceCheckbox.checked || varyStepsCheckbox.checked;
const hasVaryOption = seedValue === '' || incrementSeedCheckbox.checked || varyGuidanceCheckbox.checked || varyStepsCheckbox.checked;
if (requestedCount > 1 && !hasVaryOption) {
requestedCount = 1;
}
setStatus(requestedCount === 1 ? 'Generating image...' : `Generating image 1 of ${requestedCount}...`, 'loading');
localStorage.setItem('settings', JSON.stringify(getSettings()));
const data = {
prompt: prompt,
negative_prompt: document.getElementById('negative-prompt').value.trim(),
@ -652,6 +653,13 @@
results.appendChild(card);
}
window.addEventListener('load', function() {
let settings = localStorage.getItem('settings');
if (settings !== null) {
applySettings(JSON.parse(settings));
}
})
</script>
</body>
</html>

Loading…
Cancel
Save