|
const thumbnail = require('../../thumbnail') |
|
const api = require('../api') |
|
const io = require('../io') |
|
const html_manip = require('../html_manip') |
|
|
|
class Lexica { |
|
constructor(items = []) { |
|
|
|
this.items = items |
|
} |
|
|
|
delete() { |
|
this.items = [] |
|
} |
|
} |
|
|
|
async function requestHostedUrl(base64) { |
|
try { |
|
const payload = { |
|
key: '6d207e02198a847aa98d0a2a901485a5', |
|
source: base64, |
|
} |
|
const url = 'https://freeimage.host/api/1/upload' |
|
|
|
const result_json = await api.requestFormDataPost(url, payload) |
|
|
|
const image_url = result_json.image.url |
|
return image_url |
|
} catch (e) { |
|
console.warn(e) |
|
} |
|
} |
|
|
|
async function requestLexica(search_query) { |
|
const lexica_url = `https://lexica.art/api/v1/search?q=${search_query}` |
|
const url_encoded = encodeURI(lexica_url) |
|
result = await api.requestGet(url_encoded) |
|
console.log('result:', result) |
|
return result |
|
} |
|
function displayAllLexicaImages(lexica_items) { |
|
const lexicaMasterImageContainer = document.getElementById( |
|
'divLexicaImagesContainer' |
|
) |
|
lexicaMasterImageContainer.innerHTML = '' |
|
for (item of lexica_items) { |
|
displayLexicaImage(item) |
|
} |
|
} |
|
function displayLexicaImage(lexica_item) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const lexicaMasterImageContainer = document.getElementById( |
|
'divLexicaImagesContainer' |
|
) |
|
|
|
img_html = document.createElement('img') |
|
img_html.classList.add('viewer-image') |
|
img_html.src = lexica_item.srcSmall |
|
img_html.style.width = '100px' |
|
const thumbnail_container = thumbnail.Thumbnail.wrapImgInContainer( |
|
img_html, |
|
'viewer-image-container' |
|
) |
|
|
|
async function loadOnCanvas(lexica_item) { |
|
|
|
try { |
|
const link = lexica_item.src |
|
const image_file_name = 'lexica_image.png' |
|
await io.IO.urlToLayer(link, image_file_name) |
|
} catch (e) { |
|
console.warn('loadOnCanvas(): ', lexica_item, e) |
|
} |
|
} |
|
async function loadSettingsToUI(lexica_item) { |
|
try { |
|
const settings = { |
|
prompt: lexica_item.prompt, |
|
width: lexica_item.width, |
|
height: lexica_item.height, |
|
seed: lexica_item.seed, |
|
cfg_scale: lexica_item.guidance, |
|
} |
|
g_ui_settings_object.autoFillInSettings(settings) |
|
} catch (e) { |
|
console.warn(e) |
|
} |
|
} |
|
async function searchForSimilarImage(lexica_item) { |
|
try { |
|
document.getElementById('LexicaSearchField').value = lexica_item.src |
|
const result_json = await requestLexica(lexica_item.src) |
|
|
|
const lexica_items = result_json.images |
|
|
|
displayAllLexicaImages(lexica_items) |
|
} catch (e) { |
|
console.warn(e) |
|
} |
|
} |
|
thumbnail.Thumbnail.addSPButtonToContainer( |
|
thumbnail_container, |
|
'svg_sp_btn_canvas', |
|
'Load on Canvas', |
|
loadOnCanvas, |
|
lexica_item |
|
) |
|
thumbnail.Thumbnail.addSPButtonToContainer( |
|
thumbnail_container, |
|
'svg_sp_btn', |
|
'load settings', |
|
loadSettingsToUI, |
|
lexica_item |
|
) |
|
thumbnail.Thumbnail.addSPButtonToContainer( |
|
thumbnail_container, |
|
'svg_sp_btn_search', |
|
'Search for Similar Image', |
|
searchForSimilarImage, |
|
lexica_item |
|
) |
|
thumbnail_container.addEventListener('click', () => { |
|
setLexicaPromptValue(lexica_item.prompt) |
|
|
|
const originalPosition = taLexicaPrompt.offsetTop |
|
const currentPosition = document.querySelector('body > div').scrollTop |
|
|
|
const isScrolledPast = currentPosition > originalPosition |
|
|
|
if (isScrolledPast) { |
|
taLexicaPrompt.style.position = 'fixed' |
|
} else { |
|
taLexicaPrompt.style.position = 'static' |
|
} |
|
}) |
|
|
|
lexicaMasterImageContainer.appendChild(thumbnail_container) |
|
} |
|
|
|
const taLexicaPrompt = document.querySelector('#lexicaPrompt') |
|
function setLexicaPromptValue(input) { |
|
taLexicaPrompt.value = input |
|
} |
|
function getLexicaPromptValue() { |
|
return taLexicaPrompt.value |
|
} |
|
|
|
document |
|
.getElementById('btnSearchLexica') |
|
.addEventListener('click', async () => { |
|
const search_query = document.getElementById('LexicaSearchField').value |
|
const result_json = await requestLexica(search_query) |
|
|
|
const lexica_items = result_json.images |
|
const lexica_obj = getLexicaObject() |
|
lexica_obj.items = lexica_items |
|
displayAllLexicaImages(lexica_items) |
|
}) |
|
|
|
document |
|
.getElementById('btnReverseSearchLexica') |
|
.addEventListener('click', async () => { |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
const width = html_manip.getWidth() |
|
const height = html_manip.getHeight() |
|
const selectionInfo = await psapi.getSelectionInfoExe() |
|
|
|
const base64 = |
|
await io.IO.getSelectionFromCanvasAsBase64Interface_New( |
|
width, |
|
height, |
|
selectionInfo, |
|
true |
|
) |
|
const hosted_url = await requestHostedUrl(base64) |
|
|
|
const result_json = await requestLexica(hosted_url) |
|
|
|
const lexica_items = result_json.images |
|
|
|
displayAllLexicaImages(lexica_items) |
|
} catch (e) { |
|
console.warn(e) |
|
} |
|
}) |
|
|
|
const windowEventListener = document |
|
.querySelector('body > div') |
|
.addEventListener('scroll', () => { |
|
const originalPosition = taLexicaPrompt.offsetTop |
|
const currentPosition = document.querySelector('body > div').scrollTop |
|
taLexicaPrompt.style.position = 'static' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
const g_lexica_obj = new Lexica() |
|
|
|
function getLexicaObject() { |
|
return g_lexica_obj |
|
} |
|
function setLexicaObject(lexica_obj) { |
|
g_lexica_obj = lexica_obj |
|
} |
|
module.exports = { |
|
requestLexica, |
|
displayLexicaImage, |
|
displayAllLexicaImages, |
|
requestHostedUrl, |
|
Lexica, |
|
getLexicaObject, |
|
setLexicaObject, |
|
} |
|
|