Files
2025-08-06 13:26:28 +09:00

77 lines
2.3 KiB
JavaScript

/**
* NF Preview Selector - Main Extension
* A floating dialog-based image review and selection system for ComfyUI
*/
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
import { nfPreviewDialog } from './preview_dialog.js';
app.registerExtension({
name: "nf.preview_selector",
async setup() {
if (api.addEventListener) {
api.addEventListener("nf_preview_request", (event) => {
nfPreviewDialog.show(event.detail);
});
}
app.ui.settings.addSetting({
id: "NFPreviewSelector.UI.WindowPosition",
name: "Remember window position and size",
type: "boolean",
defaultValue: true,
tooltip: "Remember the position and size of the preview dialog window between sessions"
});
app.ui.settings.addSetting({
id: "NFPreviewSelector.UI.MaxWidth.v2",
name: "Dialog maximum width (px)",
type: "number",
defaultValue: 800,
tooltip: "Maximum width of the preview dialog in pixels (400-1800)"
});
app.ui.settings.addSetting({
id: "NFPreviewSelector.Keybinding.EnableShortcuts",
name: "Enable keyboard shortcuts in expanded view",
type: "boolean",
defaultValue: true,
tooltip: "Enable keyboard shortcuts for zoom and navigation in the expanded image view (ESC: close, Page Up/Down: zoom, Alt+Arrow: navigate)"
});
},
async nodeCreated(node) {
if (node.comfyClass === "NFPreviewSelector") {
node.title = "NF Preview Selector";
node.onResize = function() {
};
}
},
async beforeRegisterNodeDef(nodeType, nodeData, app) {
if (nodeData.name === "NFPreviewSelector") {
const onNodeCreated = nodeType.prototype.onNodeCreated;
nodeType.prototype.onNodeCreated = function() {
if (onNodeCreated) {
onNodeCreated.apply(this, arguments);
}
this.setProperty("review_position", { x: 100, y: 100 });
};
}
}
});