diff --git a/ui/index.html b/ui/index.html index fb6738ca..bfef5c43 100644 --- a/ui/index.html +++ b/ui/index.html @@ -587,7 +587,7 @@ async function doMakeImage(reqBody) { imgSaveBtn.addEventListener('click', function() { let imgDownload = document.createElement('a') - imgDownload.download = generateUUID() + '.png' + imgDownload.download = createFileName(); imgDownload.href = imgBody imgDownload.click() }) @@ -692,22 +692,42 @@ async function makeImage() { } } -function generateUUID() { // Public Domain/MIT - var d = new Date().getTime();//Timestamp - var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random() * 16;//random number between 0 and 16 - if(d > 0){//Use timestamp until depleted - r = (d + r)%16 | 0; - d = Math.floor(d/16); - } else {//Use microseconds since page-load if supported - r = (d2 + r)%16 | 0; - d2 = Math.floor(d2/16); - } - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); - }); +// create a file name with embedded prompt and metadata +// for easier cateloging and comparison +function createFileName() { + + // Most important information is the prompt + const underscoreName = promptField.value = promptField.value.replace(/[^a-zA-Z0-9]/g, '_'); + const seed = seedField.value; + const steps = numInferenceStepsField.value; + const guidance = guidanceScaleField.value; + + // name and the top level metadata + let fileName = `sd_${underscoreName}_Seed:${seed}_Steps:${steps}_Guidance:${guidance}`; + + // add the tags + let tags = []; + let tagString = ''; + document.querySelectorAll(modifyTagsSelector).forEach(function(tag) { + tags.push(tag.innerHTML); + }) + + // join the tags with a pipe + if (tags.length > 0) { + tagString = '_Tags:'; + tagString += tags.join('|'); + } + + // append empty or populated tags + fileName += `${tagString}`; + + // add the file extension + fileName += `.png`; + + return fileName; } + soundToggle.addEventListener('click', handleBoolSettingChange(SOUND_ENABLED_KEY)) soundToggle.checked = isSoundEnabled()