Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
312c289
[core] Split `plugins.py` into a `core/plugins` package
gregoire-dl Jul 14, 2026
bf15092
[core/plugins] Manager: Rename `NodePluginManager` to `PluginManager`
gregoire-dl Jul 14, 2026
d1fa49a
[core/plugins] Base: Rename `NodePlugin` to `NodeDescProvider`
gregoire-dl Jul 14, 2026
9cf0ae8
[core/plugins] Base: Rename `NodeDescProvider.nodeDescriptor` to `Nod…
gregoire-dl Jul 14, 2026
76f6445
[core/plugins] Base: Move `validateNodeDesc` and `formatNodeDescripti…
gregoire-dl Jul 14, 2026
b5452b4
[core/plugins] Base: Remove `isUserPlugin` in `NodeDescProvider`
gregoire-dl Jul 14, 2026
675db36
[core/plugins] Manager: Rename `isRegistered` to `isNodeDescRegistered`
gregoire-dl Jul 14, 2026
183a656
[core/plugins] Manager: Rename `belongsToPlugin` to `getPluginFromNod…
gregoire-dl Jul 14, 2026
a7e0168
[core/plugins] Base: Fix `reload`missing plugin and trailing-whitespaces
gregoire-dl Jul 14, 2026
a4a6405
[core/plugins] Base: Rename `__validateNodeDescClass` method and fix …
gregoire-dl Jul 14, 2026
f361572
[core/plugins] Base: Fix `NodeDescProvider` constructor input name an…
gregoire-dl Jul 14, 2026
bc2801e
[core/plugins] Base: Add `PluginType` enum
gregoire-dl Jul 14, 2026
d7f9924
[core/plugins] Base: Add `SubmitterProvider` and `SubmitterProviderSt…
gregoire-dl Jul 14, 2026
ce3ed44
[core/plugins] Add `SubmitterProvider` in `Plugin` and `PluginManager`
gregoire-dl Jul 14, 2026
11e01c0
[core/plugins] Base: Rename `self._isUserPlugin` in `Plugin`
gregoire-dl Jul 14, 2026
68dd593
[core/plugins] Base: Use `_name` as identifier for `addSubmitterProvi…
gregoire-dl Jul 14, 2026
8d809ab
[core/plugins] Base: Add `name` property to `NodeDescProvider`
gregoire-dl Jul 14, 2026
3e50d0a
[core/plugins] Base: Rename `nodes` property to `nodeDescProviders` i…
gregoire-dl Jul 14, 2026
9446e7e
[core/plugins] Add `PluginLoader`
gregoire-dl Jul 14, 2026
7e4cffe
[tests] Add test file for `PluginLoader`
gregoire-dl Jul 14, 2026
f3beb87
[core/plugins] Remove old plugin loading machanism, migrate to `Plugi…
gregoire-dl Jul 15, 2026
edaabf8
[core/plugins] Base: Fix `Plugin` folder path for `processEnvFactory`
gregoire-dl Jul 15, 2026
645b144
[core/plugins] Base: Add version for `Plugin`
gregoire-dl Jul 15, 2026
00365d0
[core/plugins] Add `PluginConfig`
gregoire-dl Jul 15, 2026
68d3c11
[core/plugins] Loader: Use `PluginConfig` to find plugin name and ver…
gregoire-dl Jul 15, 2026
8c42af3
[tests] pluginLoader: Add tests for `PluginConfig`
gregoire-dl Jul 15, 2026
4a5fcee
[core] Init: Load subfolders as built-in plugins
gregoire-dl Jul 15, 2026
94e90eb
[doc] Update `INSTALL_PLUGINS.md` for standalone nodes and configurat…
gregoire-dl Jul 15, 2026
6a5c0d2
[tests] Add missing `config.json` for test plugin `pluginA`
gregoire-dl Jul 16, 2026
151cc83
[core/plugins] Base / Env / Manager: Fix dict type hints
gregoire-dl Jul 16, 2026
1d6c845
[tests] Utils: use utf-8 encoding in `writeFile`
gregoire-dl Jul 16, 2026
ce88202
[core/plugins] Manager: Fix `PluginManager` docstring
gregoire-dl Jul 16, 2026
94cd2b1
[core/plugins] Base: Fix `Plugin` docstring
gregoire-dl Jul 16, 2026
6e8e0d8
[core] Init: Fix update pipeline templates in `initPlugins()`
gregoire-dl Jul 17, 2026
4ed9af9
[core/plugins] Base/Loader/Manager: Improve logs
gregoire-dl Jul 20, 2026
cf1bd6c
[core/plugins] Base: Reuse Plugin's `processEnv` for dirtree `NodeDes…
gregoire-dl Jul 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ A few distinctions are easy to confuse. Keep them straight before changing engin
* **Graph = DAG of attributes.** A **`Graph`** (`meshroom/core/graph.py`) holds nodes connected by **`Edge`**s that link one node's *output* attribute to another node's *input* attribute. A connected input reads its value from upstream; the graph is a DAG and defines evaluation order. Each node computes a content-based **UID** (hash of its inputs) so unchanged nodes can be cached and skipped on recompute.
* **Execution = chunks.** Work is split into **`NodeChunk`**s for parallelism (driven by the descriptor's `size`/`parallelization`). `desc.Node` subclasses implement **`processChunk(chunk)`** in Python; `desc.CommandLineNode` builds a command line from its `commandLine` template plus the chunk's range and runs the external binary. **`TaskManager`** (`meshroom/core/taskManager.py`) orchestrates execution — either **locally** (`compute`) or by **submitting** to a render farm (`submit`) via `meshroom/submitters/`.
* **Persistence.** Graphs are saved as **`.mg`** JSON files (`meshroom/core/graphIO.py`): a versioned `header` plus a `graph` payload. On load, `nodeFactory` reconciles descriptor changes so old projects still open — a node that no longer matches its current descriptor becomes a **`CompatibilityNode`** instead of failing. Pipeline **templates** are just `.mg` files registered at startup.
* **Discovery.** Node types and pipeline templates are loaded at import time (`meshroom/core/__init__.py`, `meshroom/core/plugins.py`) from the built-in `meshroom/nodes/` plus any plugin/template paths (see [INSTALL_PLUGINS.md](INSTALL_PLUGINS.md)).
* **Discovery.** Node types and pipeline templates are loaded at import time (`meshroom/core/__init__.py`, `meshroom/core/plugins/`) from the built-in `meshroom/nodes/` plus any plugin/template paths (see [INSTALL_PLUGINS.md](INSTALL_PLUGINS.md)).
* **UI bridge.** The engine is Qt-agnostic: `meshroom/common/` selects either a Qt or a headless backend for `BaseObject`, so the core runs without a UI. The `meshroom/ui/*.py` layer wraps it for Qt — `app.py` (application/entry), `graph.py` (a `UIGraph` exposing the core `Graph` as Qt models + async compute), `commands.py` (undo/redo command stack), `scene.py`. QML in `meshroom/ui/qml/` binds to these.

## Development & Verification
Expand Down
27 changes: 24 additions & 3 deletions INSTALL_PLUGINS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Plugins are collections of nodes and templates with their own dependencies. Plug
## Required Structure

- **Meshroom folder**: All plugin nodes and templates must be placed within a `./meshroom/` directory
- **Configuration file (optional)**: `./meshroom/config.json` file allows to define custom environment variables for the plugin
- **Configuration file (optional)**: `./meshroom/config.json` file allows to define the plugin's name, version and custom environment variables
- **Virtual environment (optional)**: If you have specific dependencies, you can create a virtual environment named "venv" in a folder and this Python will be used when computing the node.

## Example Structure
Expand All @@ -18,8 +18,7 @@ For a plugin named "customPlugin", Meshroom expects this layout:
│ │ │ ├── __init__.py # Required to be a python module
│ │ │ ├── NodeA.py
│ │ │ ├── NodeB.py
│ │ ├── customNodes2/ # Another set of nodes if needed
│ │ │ ├── __init__.py
│ │ ├── customNodes2/ # Another set of standalone nodes
│ │ │ ├── NodeC.py
│ │ │ ├── NodeD.py
│ │ ├── customTemplate1.mg # Ready-to-use pipeline templates
Expand All @@ -29,6 +28,28 @@ For a plugin named "customPlugin", Meshroom expects this layout:
│ └── ... # Custom code (any structure)
```

## Configuration File

`config.json` can be written in two formats:

- A plain list of environment variable entries:
```json
[
{ "key": "MY_VAR", "type": "string", "value": "myValue" },
{ "key": "MY_PATH", "type": "path", "value": "relativeOrAbsolutePath" }
]
```
- An object with optional `name`, `version`, and `env` keys, `env` using the same entry format as above:
```json
{
"name": "customPlugin",
"version": "1.0.0",
"env": [
{ "key": "MY_VAR", "type": "string", "value": "myValue" }
]
}
```

## Loading the Plugin

The "customPlugin" will be loaded automatically when Meshroom starts by setting the `MESHROOM_PLUGINS_PATH` environment variable:
Expand Down
Loading
Loading