<script lang="ts"> import { lcmLiveStatus, LCMLiveStatus, streamId } from '$lib/lcmLive'; import { getPipelineValues } from '$lib/store'; import Button from '$lib/components/Button.svelte'; import Floppy from '$lib/icons/floppy.svelte'; import { snapImage } from '$lib/utils'; $: isLCMRunning = $lcmLiveStatus !== LCMLiveStatus.DISCONNECTED; $: console.log('isLCMRunning', isLCMRunning); let imageEl: HTMLImageElement; async function takeSnapshot() { if (isLCMRunning) { await snapImage(imageEl, { prompt: getPipelineValues()?.prompt, negative_prompt: getPipelineValues()?.negative_prompt, seed: getPipelineValues()?.seed, guidance_scale: getPipelineValues()?.guidance_scale }); } } </script> <div class="relative mx-auto aspect-square max-w-lg self-center overflow-hidden rounded-lg border border-slate-300" > <!-- svelte-ignore a11y-missing-attribute --> {#if isLCMRunning} <img bind:this={imageEl} class="aspect-square w-full rounded-lg" src={'/api/stream/' + $streamId} /> <div class="absolute bottom-1 right-1"> <Button on:click={takeSnapshot} disabled={!isLCMRunning} title={'Take Snapshot'} classList={'text-sm ml-auto text-white p-1 shadow-lg rounded-lg opacity-50'} > <Floppy classList={''} /> </Button> </div> {:else} <img class="aspect-square w-full rounded-lg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" /> {/if} </div>