Files
jaidaken f09734b0ee
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Add custom nodes, Civitai loras (LFS), and vast.ai setup script
Includes 30 custom nodes committed directly, 7 Civitai-exclusive
loras stored via Git LFS, and a setup script that installs all
dependencies and downloads HuggingFace-hosted models on vast.ai.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 00:56:42 +00:00

82 lines
1.8 KiB
JavaScript

import { app } from "../../../scripts/app.js";
import { api } from "../../../scripts/api.js";
import { $el } from "../../../scripts/ui.js";
const id = "pysssss.ShowImageOnMenu";
const ext = {
name: id,
async setup(app) {
let enabled = true;
let nodeId = null;
const img = $el("img", {
style: {
width: "100%",
height: "150px",
objectFit: "contain",
},
});
const link = $el(
"a",
{
style: {
width: "100%",
height: "150px",
marginTop: "10px",
order: 100, // Place this item last (until someone else has a higher order)
display: "none",
},
href: "#",
onclick: (e) => {
e.stopPropagation();
e.preventDefault();
const node = app.graph.getNodeById(nodeId);
if (!node) return;
app.canvas.centerOnNode(node);
app.canvas.setZoom(1);
},
},
[img]
);
app.ui.menuContainer.append(link);
const show = (src, node) => {
img.src = src;
nodeId = Number(node);
link.style.display = "unset";
};
api.addEventListener("executed", ({ detail }) => {
if (!enabled) return;
const images = detail?.output?.images;
if (!images || !images.length) return;
const format = app.getPreviewFormatParam();
const src = [
`./view?filename=${encodeURIComponent(images[0].filename)}`,
`type=${images[0].type}`,
`subfolder=${encodeURIComponent(images[0].subfolder)}`,
`t=${+new Date()}${format}`,].join('&');
show(src, detail.node);
});
api.addEventListener("b_preview", ({ detail }) => {
if (!enabled) return;
show(URL.createObjectURL(detail), app.runningNodeId);
});
app.ui.settings.addSetting({
id,
name: "🐍 Show Image On Menu",
defaultValue: true,
type: "boolean",
onChange(value) {
enabled = value;
if (!enabled) link.style.display = "none";
},
});
},
};
app.registerExtension(ext);