Nest characters in submenues

This commit is contained in:
Lucas Sköld
2025-06-28 23:02:36 +02:00
parent 8b24769ae1
commit 23dcfa8002
2 changed files with 51 additions and 1 deletions
+1 -1
View File
@@ -123,7 +123,7 @@ class CharacterSelectNode:
@classmethod
def INPUT_TYPES(cls):
cls.check_initialize()
character_names = ["None"] + list(cls.final_characters)
character_names = ["None"] + list(cls.final_characters) + ["SN0W_CHARACTER_SELECTOR"]
return {
"required": {
"character": (character_names,),
+50
View File
@@ -0,0 +1,50 @@
import { app } from "../../../scripts/app.js";
app.registerExtension({
name: "sn0w.CustomCharacterNode",
async setup() {
const existingContextMenu = LiteGraph.ContextMenu;
LiteGraph.ContextMenu = function (values, options) {
if (values[values.length - 1] != "SN0W_CHARACTER_SELECTOR") {
return existingContextMenu.call(this, values, options);
}
const originalCallback = options.callback;
const seriesGroups = {};
values.slice(1).forEach((value) => {
const match = value.match(/^(.+?)\s*\((.+?)\)$/);
if (match) {
const [, , seriesName] = match;
if (!seriesGroups[seriesName]) {
seriesGroups[seriesName] = [];
}
seriesGroups[seriesName].push(value);
}
});
const newCallback = (item, options) => {
if (originalCallback && item && item.content) {
originalCallback(item.content, options);
}
};
const hierarchicalValues = [{ content: "None", disabled: false, callback: newCallback }];
Object.keys(seriesGroups).forEach((seriesName) => {
hierarchicalValues.push({
content: seriesName,
disabled: false,
has_submenu: true,
submenu: {
options: seriesGroups[seriesName].map((characterName) => ({
content: characterName,
callback: newCallback,
})),
},
});
});
options.callback = undefined;
existingContextMenu.call(this, hierarchicalValues, options);
};
},
});