* added SPLIT node to break images into vertical or horizontal slices

This commit is contained in:
Alexander G. Morano
2025-05-27 19:29:21 -04:00
parent d365f18232
commit 804fed3255
4 changed files with 28 additions and 4 deletions
+5
View File
@@ -138,6 +138,11 @@ Nodes that have been migrated:
[Migrated to Jovi_GLSL](https://github.com/Amorano/Jovi_GLSL)
**2025/05/27** @2.1.7:
* re-ranged all FLOAT to their maximum representations
* clerical cleanup for JS callbacks
* added `SPLIT` node to break images into vertical or horizontal slices
**2025/05/25** @2.1.6:
* loosened restriction for python 3.11+ to allow for 3.10+
* * I make zero guarantee that will actually let 3.10 work and I will not support 3.10
+21 -3
View File
@@ -1,5 +1,6 @@
""" Jovimetrix - Transform """
from re import I
import sys
from enum import Enum
@@ -22,7 +23,7 @@ from cozy_comfyui.image.channel import \
channel_solid
from cozy_comfyui.image.convert import \
tensor_to_cv, cv_to_tensor_full, image_mask, image_mask_add
tensor_to_cv, cv_to_tensor_full, cv_to_tensor, image_mask, image_mask_add
from cozy_comfyui.image.compose import \
EnumOrientation, EnumEdge, EnumMirrorMode, EnumScaleMode, EnumInterpolation, \
@@ -188,7 +189,7 @@ Split an image into two or four images based on the percentages for width and he
"optional": {
Lexicon.IMAGE: (COZY_TYPE_IMAGE, {}),
Lexicon.VALUE: ("FLOAT", {
"default": 0.5, "min": 0, "max": 1
"default": 0.5, "min": 0, "max": 1, "step": 0.001
}),
Lexicon.FLIP: ("BOOLEAN", {
"default": False,
@@ -219,8 +220,25 @@ Split an image into two or four images based on the percentages for width and he
images = []
pbar = ProgressBar(len(params))
for idx, (pA, percent, flip, mode, wihi, sample, matte) in enumerate(params):
w, h = wihi
pA = channel_solid(w, h, matte) if pA is None else tensor_to_cv(pA)
images.append(cv_to_tensor_full(pA, matte))
if flip:
size = pA.shape[1]
percent = max(1, min(size-1, int(size * percent)))
image_a = pA[:, :percent]
image_b = pA[:, percent:]
else:
size = pA.shape[0]
percent = max(1, min(size-1, int(size * percent)))
image_a = pA[:percent, :]
image_b = pA[percent:, :]
if mode != EnumScaleMode.MATTE:
image_a = image_scalefit(image_a, w, h, mode, sample)
image_b = image_scalefit(image_b, w, h, mode, sample)
images.append([cv_to_tensor(img) for img in [image_a, image_b]])
pbar.update_absolute(idx)
return image_stack(images)
+1
View File
@@ -37,6 +37,7 @@
"ROUTE (JOV) \ud83d\ude8c": "Routes the input data from the optional input ports to the output port, preserving the order of inputs",
"SAVE OUTPUT (JOV) \ud83d\udcbe": "Save images with metadata to any specified path",
"SHAPE GEN (JOV) \u2728": "Create n-sided polygons",
"SPLIT (JOV) \ud83c\udfad": "Split an image into two or four images based on the percentages for width and height",
"STACK (JOV) \u2795": "Merge multiple input images into a single composite image by stacking them along a specified axis",
"STRINGER (JOV) \ud83e\ude80": "Manipulate strings through filtering",
"SWIZZLE (JOV) \ud83d\ude35": "Swap components between two vectors based on specified swizzle patterns and values",
+1 -1
View File
@@ -1,7 +1,7 @@
[project]
name = "jovimetrix"
description = "Animation via tick. Parameter manipulation with wave generator. Unary and Binary math support. Value convert int/float/bool, VectorN and Image, Mask types. Shape mask generator. Stack images, do channel ops, split, merge and randomize arrays and batches. Load images & video from anywhere. Dynamic bus routing. Save output anywhere! Flatten, crop, transform; check colorblindness or linear interpolate values."
version = "2.1.6"
version = "2.1.7"
license = { file = "LICENSE" }
readme = "README.md"
authors = [{ name = "Alexander G. Morano", email = "amorano@gmail.com" }]