| 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, |
| } |
|
|