import * as piexif from 'piexifjs'; interface IImageInfo { prompt?: string; negative_prompt?: string; seed?: number; guidance_scale?: number; } export enum windowType { image = 'image', video = 'video' } export function snapImage(imageEl: HTMLImageElement, info: IImageInfo) { try { const zeroth: { [key: string]: any } = {}; const exif: { [key: string]: any } = {}; const gps: { [key: string]: any } = {}; zeroth[piexif.ImageIFD.Make] = 'LCM Image-to-Image ControNet'; zeroth[piexif.ImageIFD.ImageDescription] = `prompt: ${info?.prompt} | negative_prompt: ${info?.negative_prompt} | seed: ${info?.seed} | guidance_scale: ${info?.guidance_scale}`; zeroth[piexif.ImageIFD.Software] = 'https://github.com/radames/Real-Time-Latent-Consistency-Model'; exif[piexif.ExifIFD.DateTimeOriginal] = new Date().toISOString(); const exifObj = { '0th': zeroth, Exif: exif, GPS: gps }; const exifBytes = piexif.dump(exifObj); const canvas = document.createElement('canvas'); canvas.width = imageEl.naturalWidth; canvas.height = imageEl.naturalHeight; const ctx = canvas.getContext('2d') as CanvasRenderingContext2D; ctx.drawImage(imageEl, 0, 0); const dataURL = canvas.toDataURL('image/jpeg'); const withExif = piexif.insert(exifBytes, dataURL); const a = document.createElement('a'); a.href = withExif; a.download = `lcm_txt_2_img${Date.now()}.png`; a.click(); } catch (err) { console.log(err); } } export function expandWindow(streamURL: string, type: windowType = windowType.image) { const newWindow = window.open( '', '_blank', 'width=1024,height=1024,scrollbars=0,resizable=1,toolbar=0,menubar=0,location=0,directories=0,status=0' ) as Window; const html = ` <html> <head> <title>Real-Time Latent Consistency Model</title> <style> body { margin: 0; padding: 0; background-color: black; } </style> </head> <body> <script> let isFullscreen = false; window.onkeydown = function(event) { switch (event.code) { case "Escape": window.close(); break; case "Enter": if (isFullscreen) { document.exitFullscreen(); isFullscreen = false; } else { document.documentElement.requestFullscreen(); isFullscreen = true; } break; } } </script> </body> </html> `; newWindow.document.write(html); const img = newWindow.document.createElement('img'); img.src = streamURL; img.style.width = '100%'; img.style.height = '100%'; img.style.objectFit = 'contain'; newWindow.document.body.appendChild(img); return newWindow; }