Back to Node List

Multi Path

multi_path_editor

Multi-layer bezier path editor. Each layer is an independent sub-path. Outputs combined path and individual layers via pin promotion.

Reviewed
Guide available
The node name and summary are available in English. Port, parameter, and article details are currently shown in Japanese.

Output Ports

NameTypeDescription
パス
path
Path
全可視レイヤーを結合したパスデータ

Parameters

NameTypeDefaultRangeDescription / Options
width
Int
641–1024

キャンバスの幅(ピクセル)

高さ
height
Int
641–1024

キャンバスの高さ(ピクセル)

パスデータ
path_data
CustomData

マルチパスJSONデータ(エディタが管理)

レイヤー数
layer_count
Int
00–32

レイヤー数(エディタが自動管理)

レイヤー 1
layer_1
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #1 のサブパスデータ(Path型で出力)

レイヤー 2
layer_2
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #2 のサブパスデータ(Path型で出力)

レイヤー 3
layer_3
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #3 のサブパスデータ(Path型で出力)

レイヤー 4
layer_4
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #4 のサブパスデータ(Path型で出力)

レイヤー 5
layer_5
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #5 のサブパスデータ(Path型で出力)

レイヤー 6
layer_6
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #6 のサブパスデータ(Path型で出力)

レイヤー 7
layer_7
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #7 のサブパスデータ(Path型で出力)

レイヤー 8
layer_8
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #8 のサブパスデータ(Path型で出力)

レイヤー 9
layer_9
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #9 のサブパスデータ(Path型で出力)

レイヤー 10
layer_10
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #10 のサブパスデータ(Path型で出力)

レイヤー 11
layer_11
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #11 のサブパスデータ(Path型で出力)

レイヤー 12
layer_12
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #12 のサブパスデータ(Path型で出力)

レイヤー 13
layer_13
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #13 のサブパスデータ(Path型で出力)

レイヤー 14
layer_14
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #14 のサブパスデータ(Path型で出力)

レイヤー 15
layer_15
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #15 のサブパスデータ(Path型で出力)

レイヤー 16
layer_16
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #16 のサブパスデータ(Path型で出力)

レイヤー 17
layer_17
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #17 のサブパスデータ(Path型で出力)

レイヤー 18
layer_18
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #18 のサブパスデータ(Path型で出力)

レイヤー 19
layer_19
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #19 のサブパスデータ(Path型で出力)

レイヤー 20
layer_20
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #20 のサブパスデータ(Path型で出力)

レイヤー 21
layer_21
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #21 のサブパスデータ(Path型で出力)

レイヤー 22
layer_22
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #22 のサブパスデータ(Path型で出力)

レイヤー 23
layer_23
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #23 のサブパスデータ(Path型で出力)

レイヤー 24
layer_24
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #24 のサブパスデータ(Path型で出力)

レイヤー 25
layer_25
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #25 のサブパスデータ(Path型で出力)

レイヤー 26
layer_26
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #26 のサブパスデータ(Path型で出力)

レイヤー 27
layer_27
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #27 のサブパスデータ(Path型で出力)

レイヤー 28
layer_28
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #28 のサブパスデータ(Path型で出力)

レイヤー 29
layer_29
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #29 のサブパスデータ(Path型で出力)

レイヤー 30
layer_30
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #30 のサブパスデータ(Path型で出力)

レイヤー 31
layer_31
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #31 のサブパスデータ(Path型で出力)

レイヤー 32
layer_32
Path
{"version":1,"sub_paths":[],"canvas_width":0,"canvas_height":0}

レイヤー #32 のサブパスデータ(Path型で出力)

Overview

A path editor that manages multiple subpaths as layers in one node. For a sword made of blade, guard, and grip—one motif composed of several shapes—this single node replaces several bezier_path nodes. In addition to the combined path output, each layer can be exposed as its own Path output.

  • Version: 1
  • Interactive: yes (double-click to open the editor)
  • Editor: MultiPathEditor
  • Japanese/English support: yes (fully localized through useI18n)

Usage tips

  • Choose by structure: one isolated shape → bezier_path; a collection of parts forming one motif → this node.
  • Expose each layer as a pin (layer_N) and send it through path_stroke/path_fill with separate colors for part-based coloring such as a white blade and brown grip.
  • You can instead pass the combined output (path) to path_stroke(sub_path_scope: Single) and select by index, avoiding extra pins.
  • It can save and load .pxpath for a single path and .pxmpath for all layers. Assets made with bezier_path can also be imported as layers.

Common pitfalls

  • It is unclear which layer is being edited: check the active layer in the left panel. Temporarily hide other layers with 👁️ to make editing easier.
  • Everything fills with the same color: sending the combined path output to one path_fill naturally produces one color. Separate part colors with exposed layer pins or Single selection.
  • Broken path_data cannot be loaded: an empty string is a valid empty editor. Nonempty JSON with invalid syntax or an invalid multi-path schema produces a NodeError instead of silently becoming an empty path.

Editor features

Toolbar

Tool Icon Description
Free 🔀 Combined tool for moving control points, appending to the end, and splitting curves
Add Click to add a new control point
Move Drag to move a control point
Delete Click an anchor to delete it
Select ⬚/〇/⬣ Area selection (choose the mode from the drop-down)

Area selection tools (drop-down)

Mode Icon Operation
Rectangle selection Drag to create a rectangular selection
Lasso selection Drag to create a freehand selection
Polygon selection Click to add vertices, then double-click to finish

Drag selected control points to move them together. Shift+click adds individual points; Shift+drag constrains movement to an axis.

Other toolbar features

  • 🔒/🔓 Close/Open: close or open the active layer's path
  • 💾 Save: choose from the drop-down menu
    • 📄 Save active layer (.pxpath) — save the selected layer as a single path
    • 📦 Save all layers (.pxmpath) — save the complete layer structure
  • 📂 Load: choose from the drop-down menu
    • 📄 Load as layer (.pxpath) — append it as a new layer
    • 📦 Load all layers (.pxmpath) — replace all layers
  • 🔍 N×: show the current zoom level

Saving and loading files

Path data can be managed in files independently of the project. Two formats are supported:

Extension Use type field Description
.pxpath Single path bezier One layer of path data, compatible with Bézier Path
.pxmpath Multiple paths multipath Complete data for the entire layer structure

With Load layer (.pxpath), existing layers remain and file contents are appended as a new final layer. With Load all (.pxmpath), all existing layers are replaced.

A .pxpath saved by the Bézier Path node can also be loaded as a layer, providing cross-editor compatibility.

Layer panel (left side of the editor)

  • Add a layer with ➕
  • Click to switch the active layer
  • Toggle visibility with 👁️
  • Delete a layer with ✕ (at least one layer always remains)

Canvas

  • Active layer: drawn in normal colors and editable
  • Inactive layers: drawn at 25% opacity and not editable
  • Each layer uses a distinct display color: green, purple, orange, cyan, and so on

Keyboard shortcuts

  • Ctrl+Z: Undo (restore all layers)
  • Ctrl+Y: Redo
  • Shift+click: 16-direction pixel snapping

Operation help (bottom of the editor)

Instructions for the active tool appear automatically at the bottom of the editor in Japanese or English.

Difference from Bézier Path

Feature Bézier Path Multi Path
Number of paths One path Multiple paths (layers)
Expose segments as output pins ✅ seg_N
Expose layers as output pins ✅ layer_N
Visual editing of multiple paths
Area selection tools
File saving .pxpath .pxpath + .pxmpath
Use Fine control of one path Combining multiple paths

Examples

Basic usage

  1. Double-click the node to open the editor.
  2. Draw a path on Layer 1.
  3. Add Layer 2 with ➕ and draw another path.
  4. Edit while checking the positions of all overlaid layers.
  5. Connect the path output to PathStroke / PathFill.

Processing an individual layer

  1. In the inspector, use 📤 on layer_N to expose it as an output pin.
  2. Process the extracted Path with PathTransform.
  3. Recombine it with other paths using PathCombine.

Reusing and sharing paths

  1. Choose "Save active layer" from the 💾 drop-down and save it as .pxpath.
  2. In another project, choose "Load as layer" from the 📂 drop-down.
  3. Paths created with Bézier Path can be loaded from the same .pxpath format.

Moving multi-path data between projects

  1. Choose "Save all layers" from the 💾 drop-down and save it as .pxmpath.
  2. In another project, restore it with "Load all layers" from the 📂 drop-down.

Related nodes

  • bezier_path — single-path version
  • path_stroke / path_fill — rasterize layers, with layer selection through Single
  • path_combine / path_split — combine or split paths in the graph
  • path_transform — place drawn parts
Back to Node List