toto10's picture
Upload folder using huggingface_hub (#1)
34097e9
raw
history blame
7.3 kB
const thumbnail = require('../../thumbnail')
const api = require('../api')
const io = require('../io')
const html_manip = require('../html_manip')
class Lexica {
constructor(items = []) {
//items is json object return from lexica request
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) {
// let lexica_item = {
// id: '0482ee68-0368-4eca-8846-5930db866b33',
// gallery: 'https://lexica.art?q=0482ee68-0368-4eca-8846-5930db866b33',
// src: 'https://lexica-serve-encoded-images.sharif.workers.dev/md/0482ee68-0368-4eca-8846-5930db866b33',
// srcSmall:
// 'https://lexica-serve-encoded-images.sharif.workers.dev/sm/0482ee68-0368-4eca-8846-5930db866b33',
// prompt: 'cute chubby blue fruits icons for mobile game ui ',
// width: 512,
// height: 512,
// seed: '1413536227',
// grid: false,
// model: 'stable-diffusion',
// guidance: 7,
// promptid: 'd9868972-dad8-477d-8e5a-4a0ae1e9b72b',
// nsfw: false,
// }
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) {
// 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)
// taLexicaPrompt.style.position = 'fixed'
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 () => {
//*) check if selection is valid
//*) get base64 from selection
//*) request global url from base64
//*) request Lexica search
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 isScrolledPast = currentPosition > originalPosition
// if (isScrolledPast) {
// taLexicaPrompt.style.position = 'fixed'
// } else {
// 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,
}