Back to Node List

Bezier Path

bezier_path

Define a bezier curve path with interactive editor. Each segment can be promoted to input/output pins for external control.

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。不正な非空JSONはエラーになります

セグメント数
segment_count
Int
00–64

エディタ管理の表示用個数。評価時はpath_data内の実セグメント数を使います

セグメント 1
seg_1
Map
{}

ベジェセグメント #1 (始点, 制御点1, 制御点2, 終点)

セグメント 2
seg_2
Map
{}

ベジェセグメント #2 (始点, 制御点1, 制御点2, 終点)

セグメント 3
seg_3
Map
{}

ベジェセグメント #3 (始点, 制御点1, 制御点2, 終点)

セグメント 4
seg_4
Map
{}

ベジェセグメント #4 (始点, 制御点1, 制御点2, 終点)

セグメント 5
seg_5
Map
{}

ベジェセグメント #5 (始点, 制御点1, 制御点2, 終点)

セグメント 6
seg_6
Map
{}

ベジェセグメント #6 (始点, 制御点1, 制御点2, 終点)

セグメント 7
seg_7
Map
{}

ベジェセグメント #7 (始点, 制御点1, 制御点2, 終点)

セグメント 8
seg_8
Map
{}

ベジェセグメント #8 (始点, 制御点1, 制御点2, 終点)

セグメント 9
seg_9
Map
{}

ベジェセグメント #9 (始点, 制御点1, 制御点2, 終点)

セグメント 10
seg_10
Map
{}

ベジェセグメント #10 (始点, 制御点1, 制御点2, 終点)

セグメント 11
seg_11
Map
{}

ベジェセグメント #11 (始点, 制御点1, 制御点2, 終点)

セグメント 12
seg_12
Map
{}

ベジェセグメント #12 (始点, 制御点1, 制御点2, 終点)

セグメント 13
seg_13
Map
{}

ベジェセグメント #13 (始点, 制御点1, 制御点2, 終点)

セグメント 14
seg_14
Map
{}

ベジェセグメント #14 (始点, 制御点1, 制御点2, 終点)

セグメント 15
seg_15
Map
{}

ベジェセグメント #15 (始点, 制御点1, 制御点2, 終点)

セグメント 16
seg_16
Map
{}

ベジェセグメント #16 (始点, 制御点1, 制御点2, 終点)

セグメント 17
seg_17
Map
{}

ベジェセグメント #17 (始点, 制御点1, 制御点2, 終点)

セグメント 18
seg_18
Map
{}

ベジェセグメント #18 (始点, 制御点1, 制御点2, 終点)

セグメント 19
seg_19
Map
{}

ベジェセグメント #19 (始点, 制御点1, 制御点2, 終点)

セグメント 20
seg_20
Map
{}

ベジェセグメント #20 (始点, 制御点1, 制御点2, 終点)

セグメント 21
seg_21
Map
{}

ベジェセグメント #21 (始点, 制御点1, 制御点2, 終点)

セグメント 22
seg_22
Map
{}

ベジェセグメント #22 (始点, 制御点1, 制御点2, 終点)

セグメント 23
seg_23
Map
{}

ベジェセグメント #23 (始点, 制御点1, 制御点2, 終点)

セグメント 24
seg_24
Map
{}

ベジェセグメント #24 (始点, 制御点1, 制御点2, 終点)

セグメント 25
seg_25
Map
{}

ベジェセグメント #25 (始点, 制御点1, 制御点2, 終点)

セグメント 26
seg_26
Map
{}

ベジェセグメント #26 (始点, 制御点1, 制御点2, 終点)

セグメント 27
seg_27
Map
{}

ベジェセグメント #27 (始点, 制御点1, 制御点2, 終点)

セグメント 28
seg_28
Map
{}

ベジェセグメント #28 (始点, 制御点1, 制御点2, 終点)

セグメント 29
seg_29
Map
{}

ベジェセグメント #29 (始点, 制御点1, 制御点2, 終点)

セグメント 30
seg_30
Map
{}

ベジェセグメント #30 (始点, 制御点1, 制御点2, 終点)

セグメント 31
seg_31
Map
{}

ベジェセグメント #31 (始点, 制御点1, 制御点2, 終点)

セグメント 32
seg_32
Map
{}

ベジェセグメント #32 (始点, 制御点1, 制御点2, 終点)

セグメント 33
seg_33
Map
{}

ベジェセグメント #33 (始点, 制御点1, 制御点2, 終点)

セグメント 34
seg_34
Map
{}

ベジェセグメント #34 (始点, 制御点1, 制御点2, 終点)

セグメント 35
seg_35
Map
{}

ベジェセグメント #35 (始点, 制御点1, 制御点2, 終点)

セグメント 36
seg_36
Map
{}

ベジェセグメント #36 (始点, 制御点1, 制御点2, 終点)

セグメント 37
seg_37
Map
{}

ベジェセグメント #37 (始点, 制御点1, 制御点2, 終点)

セグメント 38
seg_38
Map
{}

ベジェセグメント #38 (始点, 制御点1, 制御点2, 終点)

セグメント 39
seg_39
Map
{}

ベジェセグメント #39 (始点, 制御点1, 制御点2, 終点)

セグメント 40
seg_40
Map
{}

ベジェセグメント #40 (始点, 制御点1, 制御点2, 終点)

セグメント 41
seg_41
Map
{}

ベジェセグメント #41 (始点, 制御点1, 制御点2, 終点)

セグメント 42
seg_42
Map
{}

ベジェセグメント #42 (始点, 制御点1, 制御点2, 終点)

セグメント 43
seg_43
Map
{}

ベジェセグメント #43 (始点, 制御点1, 制御点2, 終点)

セグメント 44
seg_44
Map
{}

ベジェセグメント #44 (始点, 制御点1, 制御点2, 終点)

セグメント 45
seg_45
Map
{}

ベジェセグメント #45 (始点, 制御点1, 制御点2, 終点)

セグメント 46
seg_46
Map
{}

ベジェセグメント #46 (始点, 制御点1, 制御点2, 終点)

セグメント 47
seg_47
Map
{}

ベジェセグメント #47 (始点, 制御点1, 制御点2, 終点)

セグメント 48
seg_48
Map
{}

ベジェセグメント #48 (始点, 制御点1, 制御点2, 終点)

セグメント 49
seg_49
Map
{}

ベジェセグメント #49 (始点, 制御点1, 制御点2, 終点)

セグメント 50
seg_50
Map
{}

ベジェセグメント #50 (始点, 制御点1, 制御点2, 終点)

セグメント 51
seg_51
Map
{}

ベジェセグメント #51 (始点, 制御点1, 制御点2, 終点)

セグメント 52
seg_52
Map
{}

ベジェセグメント #52 (始点, 制御点1, 制御点2, 終点)

セグメント 53
seg_53
Map
{}

ベジェセグメント #53 (始点, 制御点1, 制御点2, 終点)

セグメント 54
seg_54
Map
{}

ベジェセグメント #54 (始点, 制御点1, 制御点2, 終点)

セグメント 55
seg_55
Map
{}

ベジェセグメント #55 (始点, 制御点1, 制御点2, 終点)

セグメント 56
seg_56
Map
{}

ベジェセグメント #56 (始点, 制御点1, 制御点2, 終点)

セグメント 57
seg_57
Map
{}

ベジェセグメント #57 (始点, 制御点1, 制御点2, 終点)

セグメント 58
seg_58
Map
{}

ベジェセグメント #58 (始点, 制御点1, 制御点2, 終点)

セグメント 59
seg_59
Map
{}

ベジェセグメント #59 (始点, 制御点1, 制御点2, 終点)

セグメント 60
seg_60
Map
{}

ベジェセグメント #60 (始点, 制御点1, 制御点2, 終点)

セグメント 61
seg_61
Map
{}

ベジェセグメント #61 (始点, 制御点1, 制御点2, 終点)

セグメント 62
seg_62
Map
{}

ベジェセグメント #62 (始点, 制御点1, 制御点2, 終点)

セグメント 63
seg_63
Map
{}

ベジェセグメント #63 (始点, 制御点1, 制御点2, 終点)

セグメント 64
seg_64
Map
{}

ベジェセグメント #64 (始点, 制御点1, 制御点2, 終点)

Overview

The node that acts as a "pen" for drawing Bézier curves by hand. Double-click it to open the dedicated editor, then place points to define lines and shapes. A path is not an image by itself; it becomes pixel art only after connecting it to path_stroke (draw a line) or path_fill (fill a shape). It is the starting point for fixed, original shapes such as the outline of a sword, vine, or flame.

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

Usage tips

  • For simple rectangles, circles, and similar primitives, shape_generate is faster than drawing them. Use this node for free curves and original outlines.
  • By default, the editor canvas matches the project canvas. Coordinates become pixel coordinates directly during downstream rasterization, so draw at the same size as the target asset.
  • Save reusable shapes as .pxpath files with 💾 (the default destination is user_data/paths/single/). You can load them in other projects.
  • To animate a shape, expose a segment as a pin and use segment_unpack → waveform node → segment_pack to drive its coordinates externally (see "External segment control" below).

Common pitfalls

  • Nothing appears after drawing: the path output is line data, not an image. Pass it through path_stroke or path_fill to rasterize it.
  • The shape cannot be filled: the path is still open. Close it with 🔒 in the editor before connecting it to path_fill.
  • The line looks blurry or uneven: this is controlled during rasterization. Check the thickness and pixel-perfect correction settings in path_stroke.
  • Stored data is unreadable: only blank text is a valid empty editor. Invalid non-empty JSON is preserved and shown as an error; copy the original payload for recovery or explicitly reset it to an empty path.
  • segment_count mirrors the editor state. Segment data comes from path_data; changing the count alone does not create segments.
  • A connected seg_N map must contain all eight coordinates. Incomplete maps are reported instead of being ignored.
  • Connecting a seg_N beyond the segment count in path_data is also reported instead of being silently ignored.

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: toggle the path between closed and open
  • #ON / #OFF: toggle segment-number display
  • 💾 Save: save the current path to a .pxpath file
  • 📂 Load: load a path from a .pxpath file
  • 🔍 N×: show the current zoom level

Saving and loading files (.pxpath format)

Path data can be saved to and loaded from a standalone file. This is independent of project saving.

File format:

{
  "format": "PixPipelinePath",
  "version": 1,
  "type": "bezier",
  "data": { "segments": [...], "closed": false }
}

A saved file can be imported into the Multi Path Editor as a new layer.

Canvas controls

  • Zoom: mouse wheel
  • Pan: middle-button drag or Space+drag
  • Shift+click: 16-direction pixel snapping
  • Ctrl+Z / Ctrl+Y: Undo / Redo

Operation help (bottom of the editor)

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

Examples

Basic usage

  1. Double-click the node to open the editor.
  2. Click to place control points and draw a path.
  3. Connect the Path output to PathStroke or PathSample.

Checking segment numbers

  1. Turn on the # button in the editor toolbar.
  2. A numbered badge appears at the center of every segment.
  3. Use these numbers as references when decomposing the path with SegmentUnpack.

External segment control

  1. In the inspector, use 📤 on seg_N to expose it as an output pin.
  2. Connect it to SegmentUnpack and decompose the coordinate values.
  3. Process the coordinates with SineWave or another node.
  4. Reassemble them with SegmentPack.
  5. Use 📌 on seg_N to expose it as an input pin, then connect the external segment.

Reusing paths

  1. Click 💾 in the editor to save the path as a .pxpath file.
  2. Load it with 📂 in another node or project.
  3. When loading it into the Multi Path Editor, it is added as a new layer.

Related nodes

  • path_stroke / path_fill — turn the path into a stroked or filled image (almost always the next step)
  • multi_path_editor — when you want to manage multiple subpaths as layers
  • shape_generate — faster for standard shapes such as rectangles and circles
  • path_transform / path_array — transform or repeat a drawn path
Back to Node List
Bezier Path — PixPipeline Node Reference