Basic preview support

(as of latest PR commit)
This commit is contained in:
space-nuko
2023-06-05 15:45:08 -05:00
parent fde480cb43
commit eb02561906
8 changed files with 198 additions and 36 deletions

View File

@@ -11,7 +11,11 @@
import { clamp, comfyBoxImageToComfyURL, type ComfyBoxImageMetadata } from "$lib/utils";
import { f7 } from "framework7-svelte";
import type { ComfyGalleryNode } from "$lib/nodes/widgets";
import { showMobileLightbox } from "$lib/components/utils";
import { showMobileLightbox } from "$lib/components/utils";
import queueState from "$lib/stores/queueState";
import uiState from "$lib/stores/uiState";
import { loadImage } from "./utils";
import Spinner from "$lib/components/Spinner.svelte";
export let widget: WidgetLayout | null = null;
export let isMobile: boolean = false;
@@ -25,6 +29,47 @@
$: widget && setNodeValue(widget);
function tagsMatch(tags: string[] | null): boolean {
if(tags != null && tags.length > 0)
return node.properties.tags.length > 0 && node.properties.tags.every(t => tags.includes(t));
else
return node.properties.tags.length === 0;
}
let previewURL: string | null;
let previewImage: HTMLImageElement | null = null;
let previewElem: HTMLImageElement | null = null
$: {
previewURL = $queueState.previewURL;
if (previewURL && $queueState.runningPromptID != null && !$uiState.hidePreviews && node.properties.showPreviews) {
const queueEntry = queueState.getQueueEntry($queueState.runningPromptID)
if (queueEntry != null) {
const tags = queueEntry.extraData?.extra_pnginfo?.comfyBoxPrompt?.subgraphs;
if (tagsMatch(tags)) {
loadImage(previewURL).then((img) => {
previewImage = img;
})
}
else {
previewImage = null;
}
}
else {
previewImage = null;
}
}
else {
previewImage = null;
}
}
function showPreview() {
}
function hidePreview() {
}
function setNodeValue(widget: WidgetLayout) {
if (widget) {
node = widget.node as ComfyGalleryNode
@@ -34,6 +79,8 @@
imageHeight = node.imageHeight
selected_image = node.selectedImage;
forceSelectImage = node.forceSelectImage;
previewURL = null;
previewImage = null;
if ($nodeValue != null) {
if (node.properties.index < 0 || node.properties.index >= $nodeValue.length) {
@@ -108,6 +155,11 @@
<div class="wrapper comfy-gallery-widget gradio-gallery" style={widget.attrs.style || ""}>
<Block variant="solid" padding={false}>
<div class="padding">
{#if previewImage}
<div class="comfy-gallery-preview" on:mouseover={hidePreview} on:mouseout={showPreview} >
<img src={previewImage.src} bind:this={previewElem} on:mouseout={showPreview} />
</div>
{/if}
<Gallery
value={images}
label={widget.attrs.title}
@@ -153,6 +205,29 @@
}
}
}
&:hover .comfy-gallery-preview {
opacity: 0%;
}
}
.comfy-gallery-preview {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: var(--layer-top);
pointer-events: none;
transition: opacity 0.1s linear;
opacity: 100%;
> img {
width: var(--size-full);
height: var(--size-full);
object-fit: contain;
border: 5px dashed var(--secondary-400);
}
}
.padding {