From 56a0fbbe9dd6307279fe3bea7abb0b90a897845e Mon Sep 17 00:00:00 2001 From: Alice Sonolet Date: Wed, 15 Jul 2026 18:00:08 +0200 Subject: [PATCH 1/3] Add new InlineNode node type for simple process --- meshroom/core/desc/__init__.py | 1 + meshroom/core/desc/node.py | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/meshroom/core/desc/__init__.py b/meshroom/core/desc/__init__.py index c9c11a48ec..10339b7d50 100644 --- a/meshroom/core/desc/__init__.py +++ b/meshroom/core/desc/__init__.py @@ -47,6 +47,7 @@ InternalAttributesFactory, MrNodeType, Node, + InlineNode, NodeVersionType, NodeVersionTypeEnum, ) diff --git a/meshroom/core/desc/node.py b/meshroom/core/desc/node.py index d3710551f5..e247678eef 100644 --- a/meshroom/core/desc/node.py +++ b/meshroom/core/desc/node.py @@ -57,6 +57,7 @@ class MrNodeType(enum.Enum): NONE = enum.auto() BASENODE = enum.auto() NODE = enum.auto() + INLINE = enum.auto() COMMANDLINE = enum.auto() INIT = enum.auto() BACKDROP = enum.auto() @@ -527,9 +528,6 @@ class InitNode(BaseNode): def __init__(self): super(InitNode, self).__init__() - def getMrNodeType(self): - return self._mrNodeType - def processChunk(self, chunk): pass @@ -586,6 +584,17 @@ def processChunkInEnvironment(self, chunk): env=runtimeEnv) +class InlineNode(BaseNode): + """ + Node that can be computed in the current Meshroom environment. + """ + parallelization = None + _mrNodeType: MrNodeType = MrNodeType.INLINE + + def __init__(self): + super(InlineNode, self).__init__() + + class CommandLineNode(BaseNode): """ """ From 63826edb5532d30bfc8389794ff8362ed392532e Mon Sep 17 00:00:00 2001 From: Alice Sonolet Date: Wed, 15 Jul 2026 18:06:12 +0200 Subject: [PATCH 2/3] Convert nodes to InlineNode when it is a good option --- meshroom/nodes/general/FlattenFiles.py | 2 +- meshroom/nodes/general/GetParentFolder.py | 2 +- meshroom/nodes/general/PathJoin.py | 2 +- meshroom/nodes/general/UnwrapMeshroomSceneParam.py | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meshroom/nodes/general/FlattenFiles.py b/meshroom/nodes/general/FlattenFiles.py index 7ce3301351..ddf6b7e1a2 100644 --- a/meshroom/nodes/general/FlattenFiles.py +++ b/meshroom/nodes/general/FlattenFiles.py @@ -3,7 +3,7 @@ from meshroom.core import desc -class FlattenFiles(desc.Node): +class FlattenFiles(desc.InlineNode): """ This node takes a list of lists of files as input and produces a single flat list of files as output. diff --git a/meshroom/nodes/general/GetParentFolder.py b/meshroom/nodes/general/GetParentFolder.py index c823ceceee..e8f706afd8 100644 --- a/meshroom/nodes/general/GetParentFolder.py +++ b/meshroom/nodes/general/GetParentFolder.py @@ -5,7 +5,7 @@ from meshroom.core import desc -class GetParentFolder(desc.Node): +class GetParentFolder(desc.InlineNode): """ Get the parent folder """ category = "Other" diff --git a/meshroom/nodes/general/PathJoin.py b/meshroom/nodes/general/PathJoin.py index 51a949daa0..958e1b1a5f 100644 --- a/meshroom/nodes/general/PathJoin.py +++ b/meshroom/nodes/general/PathJoin.py @@ -4,7 +4,7 @@ from meshroom.core import desc -class PathJoin(desc.Node): +class PathJoin(desc.InlineNode): """ Join multiple paths """ category = "Other" diff --git a/meshroom/nodes/general/UnwrapMeshroomSceneParam.py b/meshroom/nodes/general/UnwrapMeshroomSceneParam.py index 37f6c79ebf..6e65957176 100644 --- a/meshroom/nodes/general/UnwrapMeshroomSceneParam.py +++ b/meshroom/nodes/general/UnwrapMeshroomSceneParam.py @@ -8,7 +8,7 @@ from meshroom.core import desc -class UnwrapMeshroomSceneParam(desc.CommandLineNode): +class UnwrapMeshroomSceneParam(desc.InlineNode): """Unwrap the JSON file created by a GetMeshroomSceneParams node to expose its items to the graph. @@ -96,5 +96,5 @@ def update(self, node): except Exception as e: logging.warning(f"[UnwrapMeshroomSceneParam] Failed to set the choices: {e}") - def processChunk(self, chunk): - self.setOutput(chunk.node) + def process(self, node): + self.setOutput(node) From 7e8798a8c0ece5ff7ef331e16f8b3650e8ad8909 Mon Sep 17 00:00:00 2001 From: Alice Sonolet Date: Wed, 15 Jul 2026 18:06:24 +0200 Subject: [PATCH 3/3] Add GetFileExtension node --- meshroom/nodes/general/GetFileExtension.py | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 meshroom/nodes/general/GetFileExtension.py diff --git a/meshroom/nodes/general/GetFileExtension.py b/meshroom/nodes/general/GetFileExtension.py new file mode 100644 index 0000000000..d7a448e827 --- /dev/null +++ b/meshroom/nodes/general/GetFileExtension.py @@ -0,0 +1,27 @@ +__version__ = "1.0" + +import os +from meshroom.core import desc + + +class GetFileExtension(desc.InlineNode): + inputs = [ + desc.File( + name="path", + value="", + exposed=True, + ), + ] + + outputs = [ + desc.StringParam( + name="extension", + value=None, + ), + ] + + def process(self, node): + if not node.path.value: + node.extension.value = "" + else: + node.extension.value = os.path.splitext(node.path.value)[1]