| | <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" |
| | > |
| | |
| | {#if isLCMRunning} |
| | <img bind:this={imageEl} class="aspect-square w-full rounded-lg" src={'/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> |
| | |