Neural nodes progress

This commit is contained in:
luboslenco
2025-11-20 20:11:17 +01:00
parent 142161c997
commit 39b66824de
3 changed files with 104 additions and 58 deletions
+74 -55
View File
@@ -510,7 +510,7 @@ function box_preferences_pen_tab() {
config_raw.pressure_angle = ui_check(h_pressure_angle, tr("Brush Angle")); config_raw.pressure_angle = ui_check(h_pressure_angle, tr("Brush Angle"));
ui_end_element(); ui_end_element();
let row: f32[] = [ 0.5 ]; let row: f32[] = [ 1 / 4 ];
ui_row(row); ui_row(row);
if (ui_button(tr("Help"))) { if (ui_button(tr("Help"))) {
let url: string = "https://github.com/armory3d/"; let url: string = "https://github.com/armory3d/";
@@ -701,77 +701,77 @@ function box_preferences_keymap_tab() {
function box_preferences_init_models() { function box_preferences_init_models() {
box_preferences_models = [ box_preferences_models = [
{ {
name: "Stable Diffusion", name : "Stable Diffusion",
memory: "4GB", memory : "4GB",
size: "4.2GB", size : "4.2GB",
nodes: "Inpaint Image, Outpaint Image, Text to Image, Tile Image, Vary Image", nodes : "Inpaint Image, Outpaint Image, Text to Image, Tile Image, Vary Image",
urls: ["https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors"], urls : [ "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors" ],
web: "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5", web : "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5",
license: "openrail" license : "openrail"
}, },
{ {
name: "Qwen Image", name : "Qwen Image",
memory: "13GB", memory : "13GB",
size: "15.7GB", size : "15.7GB",
nodes: "Text to Image", nodes : "Text to Image",
urls: [ urls : [
"https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/Qwen_Image-Q4_K_S.gguf", "https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/Qwen_Image-Q4_K_S.gguf",
"https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/VAE/Qwen_Image-VAE.safetensors", "https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/VAE/Qwen_Image-VAE.safetensors",
"https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct-Q4_K_S.gguf" "https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct-Q4_K_S.gguf"
], ],
web: "https://huggingface.co/QuantStack/Qwen-Image-GGUF", web : "https://huggingface.co/QuantStack/Qwen-Image-GGUF",
license: "apache-2.0" license : "apache-2.0"
}, },
{ {
name: "Qwen Image Edit", name : "Qwen Image Edit",
memory: "13GB", memory : "13GB",
size: "17.0GB", size : "17.0GB",
nodes: "Edit Image, Inpaint Image, Outpaint Image, Tile Image, Vary Image", nodes : "Edit Image, Inpaint Image, Outpaint Image, Tile Image, Vary Image",
urls: [ urls : [
"https://huggingface.co/QuantStack/Qwen-Image-Edit-2509-GGUF/resolve/main/Qwen-Image-Edit-2509-Q4_K_S.gguf", "https://huggingface.co/QuantStack/Qwen-Image-Edit-2509-GGUF/resolve/main/Qwen-Image-Edit-2509-Q4_K_S.gguf",
"https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/VAE/Qwen_Image-VAE.safetensors", "https://huggingface.co/QuantStack/Qwen-Image-GGUF/resolve/main/VAE/Qwen_Image-VAE.safetensors",
"https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct-Q4_K_S.gguf", "https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/Qwen2.5-VL-7B-Instruct-Q4_K_S.gguf",
"https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/mmproj-F16.gguf" "https://huggingface.co/unsloth/Qwen2.5-VL-7B-Instruct-GGUF/resolve/main/mmproj-F16.gguf"
], ],
web: "https://huggingface.co/QuantStack/Qwen-Image-Edit-2509-GGUF", web : "https://huggingface.co/QuantStack/Qwen-Image-Edit-2509-GGUF",
license: "apache-2.0" license : "apache-2.0"
}, },
{ {
name: "Wan", name : "Wan",
memory: "10GB", memory : "10GB",
size: "19.8GB", size : "19.8GB",
nodes: "Text to Image", nodes : "Text to Image",
urls: [ urls : [
"https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/LowNoise/Wan2.2-T2V-A14B-LowNoise-Q4_K_S.gguf", "https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/LowNoise/Wan2.2-T2V-A14B-LowNoise-Q4_K_S.gguf",
"https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/HighNoise/Wan2.2-T2V-A14B-HighNoise-Q4_K_S.gguf", "https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/HighNoise/Wan2.2-T2V-A14B-HighNoise-Q4_K_S.gguf",
"https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/VAE/Wan2.1_VAE.safetensors", "https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF/resolve/main/VAE/Wan2.1_VAE.safetensors",
"https://huggingface.co/city96/umt5-xxl-encoder-gguf/resolve/main/umt5-xxl-encoder-Q4_K_S.gguf" "https://huggingface.co/city96/umt5-xxl-encoder-gguf/resolve/main/umt5-xxl-encoder-Q4_K_S.gguf"
], ],
web: "https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF", web : "https://huggingface.co/QuantStack/Wan2.2-T2V-A14B-GGUF",
license: "apache-2.0" license : "apache-2.0"
}, },
{ {
name: "Marigold", name : "Marigold",
memory: "6GB", memory : "6GB",
size: "9.6GB", size : "9.6GB",
nodes: "Text to Image", nodes : "Text to Image",
urls: [ urls : [
"https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-depth-v1-1.q8_0.gguf", "https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-depth-v1-1.q8_0.gguf",
"https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-normals-v1-1.q8_0.gguf", "https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-normals-v1-1.q8_0.gguf",
"https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-iid-appearance-v1-1.q8_0.gguf", "https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-iid-appearance-v1-1.q8_0.gguf",
"https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-iid-lighting-v1-1.q8_0.gguf" "https://huggingface.co/armory3d/marigold-v1-1-gguf/resolve/main/marigold-iid-lighting-v1-1.q8_0.gguf"
], ],
web: "https://huggingface.co/armory3d/marigold-v1-1-gguf", web : "https://huggingface.co/armory3d/marigold-v1-1-gguf",
license: "openrail" license : "openrail"
}, },
{ {
name: "Real-ESRGAN", name : "Real-ESRGAN",
memory: "1GB", memory : "1GB",
size: "0.06GB", size : "0.06GB",
nodes: "Upscale Image", nodes : "Upscale Image",
urls: ["https://huggingface.co/armory3d/Real-ESRGAN/resolve/main/RealESRGAN_x4plus.pth"], urls : [ "https://huggingface.co/armory3d/Real-ESRGAN/resolve/main/RealESRGAN_x4plus.pth" ],
web: "https://huggingface.co/armory3d/Real-ESRGAN", web : "https://huggingface.co/armory3d/Real-ESRGAN",
license: "bsd-3-clause" license : "bsd-3-clause"
} }
]; ];
// https://huggingface.co/webui/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.safetensors // https://huggingface.co/webui/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.safetensors
@@ -802,6 +802,15 @@ function box_preferences_neural_tab() {
for (let i: i32 = 0; i < box_preferences_models.length; ++i) { for (let i: i32 = 0; i < box_preferences_models.length; ++i) {
box_preferences_model_panel(box_preferences_models[i]); box_preferences_model_panel(box_preferences_models[i]);
} }
let row: f32[] = [ 1 / 4 ];
ui_row(row);
if (ui_button(tr("Models Directory..."))) {
if (file_read_directory(neural_node_dir())[0] == "") {
file_create_directory(neural_node_dir());
}
file_start(neural_node_dir());
}
} }
function box_preferences_model_exists(file_name: string): bool { function box_preferences_model_exists(file_name: string): bool {
@@ -833,22 +842,30 @@ function box_preferences_model_panel(m: box_preferneces_model_t) {
ui_text(tr("gpu memory") + ": " + m.memory); ui_text(tr("gpu memory") + ": " + m.memory);
ui_text(tr("nodes") + ": " + m.nodes); ui_text(tr("nodes") + ": " + m.nodes);
let url: string = m.urls[0]; let url: string = m.urls[0];
let file_name: string = box_preferences_file_name_from_url(url); let file_name: string = box_preferences_file_name_from_url(url);
let found: bool = box_preferences_model_exists(file_name); let found: bool = box_preferences_model_exists(file_name);
if (neural_node_downloading > 0) { if (neural_node_downloading > 0) {
ui.enabled = false; ui.enabled = false;
let u: u64 = iron_net_bytes_downloaded; let u: u64 = iron_net_bytes_downloaded;
let i: i32 = (u / 1000000000) * 10; let i: i32 = (u / 1000000000) * 100;
let f: f32 = i / 10; let f: f32 = i / 100;
let downloaded: string = f + "GB"; let downloaded: string = f + "GB";
ui_box_hwnd.redraws = 2; ui_box_hwnd.redraws = 2;
box_preferences_htab.redraws = 2; box_preferences_htab.redraws = 2;
iron_delay_idle_sleep(); iron_delay_idle_sleep();
ui_button(tr("Downloading") + "..." + "(" + downloaded + " / " + m.size + ")"); let _BUTTON_COL: i32 = ui.ops.theme.BUTTON_COL;
ui.ops.theme.BUTTON_COL = ui.ops.theme.HIGHLIGHT_COL;
let h: ui_handle_t = ui_handle(__ID__);
h.f = f / parse_float(m.size);
ui_slider(h, downloaded + " / " + m.size, 0.0, 1.0, true, 100, false, ui_align_t.CENTER);
ui.ops.theme.BUTTON_COL = _BUTTON_COL;
ui.enabled = true; ui.enabled = true;
} }
else if (!found && ui_button(tr("Download") + " (" + m.size + ")")) { else if (!found && ui_button(tr("Download") + " (" + m.size + ")")) {
@@ -857,7 +874,7 @@ function box_preferences_model_panel(m: box_preferneces_model_t) {
} }
else if (found && ui_button(tr("Remove") + " (" + m.size + ")")) { else if (found && ui_button(tr("Remove") + " (" + m.size + ")")) {
for (let i: i32 = 0; i < m.urls.length; ++i) { for (let i: i32 = 0; i < m.urls.length; ++i) {
let url: string = m.urls[i]; let url: string = m.urls[i];
let file_name: string = box_preferences_file_name_from_url(url); let file_name: string = box_preferences_file_name_from_url(url);
iron_delete_file(neural_node_dir() + path_sep + file_name); iron_delete_file(neural_node_dir() + path_sep + file_name);
} }
@@ -997,9 +1014,11 @@ function box_preferences_show() {
if (ui_tab(box_preferences_htab, tr("Keymap"), true)) { if (ui_tab(box_preferences_htab, tr("Keymap"), true)) {
box_preferences_keymap_tab(); box_preferences_keymap_tab();
} }
if (ui_tab(box_preferences_htab, tr("Neural"), true)) { /// if (arm_windows || arm_linux || arm_macos)
box_preferences_neural_tab(); if (ui_tab(box_preferences_htab, tr("Neural"), true)) {
} box_preferences_neural_tab();
}
/// end
if (ui_tab(box_preferences_htab, tr("Plugins"), true)) { if (ui_tab(box_preferences_htab, tr("Plugins"), true)) {
box_preferences_plugins_tab(); box_preferences_plugins_tab();
} }
+10 -3
View File
@@ -54,8 +54,10 @@ function neural_node_button(node: ui_node_t, model: string): bool {
} }
} }
else if (!found && ui_button(tr("Setup"))) { else if (!found && ui_button(tr("Setup"))) {
box_preferences_htab.i = preference_tab_t.NEURAL; sys_notify_on_next_frame(function() {
box_preferences_show(); box_preferences_htab.i = preference_tab_t.NEURAL;
box_preferences_show();
});
} }
else if (found && ui_button(tr("Run"))) { else if (found && ui_button(tr("Run"))) {
return true; return true;
@@ -97,7 +99,10 @@ function neural_node_download(url: string) {
} }
neural_node_downloading++; neural_node_downloading++;
file_download_to(url, file_path, function (url: string) { neural_node_downloading--; }); file_download_to(url, file_path, function (url: string) {
neural_node_downloading--;
console_log(tr("Downloaded model from") + " " + url);
});
} }
function neural_node_download_models(models: string[]) { function neural_node_download_models(models: string[]) {
@@ -117,6 +122,8 @@ function neural_node_download_models(models: string[]) {
neural_node_download("https://github.com/armory3d/armortools/raw/refs/heads/main/base/assets/bin/macos/sd_vulkan"); neural_node_download("https://github.com/armory3d/armortools/raw/refs/heads/main/base/assets/bin/macos/sd_vulkan");
/// end /// end
iron_net_bytes_downloaded = 0;
for (let i: i32 = 0; i < models.length; ++i) { for (let i: i32 = 0; i < models.length; ++i) {
neural_node_download(models[i]); neural_node_download(models[i]);
} }
+20
View File
@@ -1,6 +1,14 @@
/// if (arm_windows || arm_linux || arm_macos)
let nodes_material_categories: string[] = [ _tr("Input"), _tr("Texture"), _tr("Color"), _tr("Utilities"), _tr("Neural"), _tr("Group") ]; let nodes_material_categories: string[] = [ _tr("Input"), _tr("Texture"), _tr("Color"), _tr("Utilities"), _tr("Neural"), _tr("Group") ];
/// else
let nodes_material_categories: string[] = [ _tr("Input"), _tr("Texture"), _tr("Color"), _tr("Utilities"), _tr("Group") ];
/// end
let nodes_material_input: ui_node_t[]; let nodes_material_input: ui_node_t[];
let nodes_material_texture: ui_node_t[]; let nodes_material_texture: ui_node_t[];
let nodes_material_color: ui_node_t[]; let nodes_material_color: ui_node_t[];
@@ -78,6 +86,8 @@ function nodes_material_init() {
separate_xyz_node_init(); separate_xyz_node_init();
vector_math2_node_init(); vector_math2_node_init();
/// if (arm_windows || arm_linux || arm_macos)
nodes_material_neural = []; nodes_material_neural = [];
edit_image_node_init(); edit_image_node_init();
image_to_depth_node_init(); image_to_depth_node_init();
@@ -90,11 +100,21 @@ function nodes_material_init() {
upscale_image_node_init(); upscale_image_node_init();
vary_image_node_init(); vary_image_node_init();
/// end
nodes_material_group = []; nodes_material_group = [];
group_node_init(); group_node_init();
/// if (arm_windows || arm_linux || arm_macos)
nodes_material_list = nodes_material_list =
[ nodes_material_input, nodes_material_texture, nodes_material_color, nodes_material_utilities, nodes_material_neural, nodes_material_group ]; [ nodes_material_input, nodes_material_texture, nodes_material_color, nodes_material_utilities, nodes_material_neural, nodes_material_group ];
/// else
nodes_material_list = [ nodes_material_input, nodes_material_texture, nodes_material_color, nodes_material_utilities, nodes_material_group ];
/// end
} }
function nodes_material_get_node_t(node_type: string): ui_node_t { function nodes_material_get_node_t(node_type: string): ui_node_t {