Back to Node List

Pixel Canvas

pixel_canvas

Draw pixel art directly in the editor

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

Input Ports

NameTypeDescription
参照
reference
Image
参照レイヤー(オプション)
パレット
palette
Palette
editor の follow mode で参照する外部パレット(オプション)

Output Ports

NameTypeDescription
画像
output
Image
ピクセルキャンバスの現在フレーム画像
スプライトシート
spritesheet
SpriteSheet
全フレームをまとめたスプライトシート
インデックス画像
indexed_image
IndexedImage
現在フレームを「パレットの何番か」で持つインデックス画像です
フレーム数
frame_count
Int
スプライトシートの総フレーム数
FPS
fps
Int
スプライトシート metadata に入る再生 FPS
列数
columns
Int
スプライトシートで使われた実際の列数
行数
rows
Int
スプライトシートで使われた実際の行数
フレーム幅
frame_width
Int
スプライトシート内の 1 フレーム幅
フレーム高さ
frame_height
Int
スプライトシート内の 1 フレーム高さ
配置順
fill_order
Text
スプライトシートに並べた配置順
パレット
palette
Palette
editor が現在使っている有効パレット

Parameters

NameTypeDefaultRangeDescription / Options
width
Int
321–256

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

高さ
height
Int
321–256

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

ピクセルデータ
pixel_data
CustomData

エディタ管理のピクセルキャンバス保存データ(旧base64 PNG / 単フレームJSON / frame-cel JSON)

Overview

The entry point for hand-drawn art. Draw directly in the node's built-in pixel-art editor, with pen, eraser, fill, selection, and frame animation, then send the image through the graph's processing pipeline. It begins a hybrid workflow: draw the base by hand, then add shading, outlines, and recoloring with nodes.

Usage tips

  • Open the editor with "✏️ Edit pixel art" in the inspector. The controls are standard: left-click for the primary color, right-click for the secondary color.
  • Connect an image to reference to display it as a reference layer, useful for cleaning pixels over a 3D render or tracing a photograph.
  • Connect palette to make the editor palette follow an external palette. Drawing with the project's shared palette keeps the asset within the managed color scheme.
  • Draw multiple frames to output an animation asset directly through spritesheet.
  • The indexed_image output is the entry point to indexed-color workflows and later bulk recoloring.

Common pitfalls

  • Downstream processing might damage the drawing: this node always retains the original. Downstream nodes never touch it, so experiments are nondestructive.
  • Changing the canvas size moved the drawing: resizing repositions existing pixels. Decide dimensions before starting to draw when possible.
  • Only half should be drawn, then mirrored: connect symmetry downstream; it does not need to happen inside the editor.

Canvas-size binding

As a generator node, new nodes automatically bind width / height to the project canvas dimensions (_canvasWidth / _canvasHeight).

State width/height value
Default (new node) Bound to and automatically follows project canvas dimensions
Manually entered or unbound Local value independent of canvas dimensions

Use the 🔗 button in the inspector to remove or restore the binding.

Drawing editor

Press "✏️ Edit pixel art" in the inspector to open the EditorShell-based popup editor.

Tools

Tool Action
✏️ Pen Draw with a configurable brush size and continuous dragging. A 1px brush also supports pixel-perfect correction. Left-click uses the primary color; right-click uses the secondary color
🧹 Eraser Make pixels transparent with a configurable brush size
🪣 Fill Four-direction flood fill. Left-click uses the primary color; right-click uses the secondary color
💉 Eyedropper Pick the color under the pointer. The primary and secondary colors are managed by the two toolbar swatches
⬚ Select Create a rectangular, lasso, or polygon selection. Drag inside to move it; use toolbar commands to flip horizontally/vertically, scale 2×, or reduce to 1/2
▭ Shape Drag a rectangle or circle. Choose fill only, line only, or both. Fill uses the primary color; line uses the secondary color

Controls

  • Mouse wheel: zoom from 1× to 32×
  • Alt+drag: pan
  • Selection tool: switch rectangle / lasso / polygon with
  • Selection display: while a selection exists, every tool shows a 範囲選択中 badge and 選択解除 button
  • Shape tool: switch rectangle / circle with
  • Pen / Eraser: set the brush size from 1〜16 in the toolbar
  • Primary / secondary color: manage them with the two toolbar swatches and swap them with the exchange button
  • Indexed-color mode: turn the # button ON to treat drawing colors as entries in the local palette
    • When switching from normal mode, if the canvas contains opaque colors outside the palette, confirm the number to add before appending them automatically
    • On switching, append a transparent swatch to the end of the local palette. It is a dedicated transparency entry, not an ordinary color index
    • When the primary / secondary color changes directly to a color absent from the palette, append it automatically
    • When the eyedropper picks a color absent from the palette, append it automatically
    • Double-click a palette color to change it and replace every matching canvas pixel
    • A palette color in use cannot be deleted. Erase or replace its canvas pixels first
    • If a new color is needed while the palette input is in Follow, first switch to a state that imports the input palette locally, then add it
  • Local palette: use the built-in palette in the left sidebar; left-click sets the primary color and right-click sets the secondary color
  • Import shared palette: select a tool-wide or project-wide palette and copy it into the local palette
    • After import, it no longer synchronizes with the shared palette. Editing colors in Pixel Canvas does not change the original shared palette
    • To propagate changes back to a shared palette, write them explicitly through a palette-editing node or similar operation
  • External palette integration: with the palette input connected, use L(Local) / F(Follow) / I(Import)
    • Local: use the palette built into PixelCanvas
    • Follow: use the input palette directly as the editor palette
    • Import: copy the input palette into the local palette for independent editing
      • Before running, show a confirmation that the current local palette will be replaced
  • Edit local palette: + adds the current color, the pen icon overwrites the selected color, and - deletes it
  • Load/save palette file: the local palette supports file import / export
    • First-wave formats are GPL / ASE / PAL (JASC) / TXT-HEX
    • File import asks for confirmation before replacing the current local palette
  • Edit a local palette color: double-click a palette entry to edit it in place with the shared color picker
  • Sidebars: both the left palette and right layers can collapse; drag their boundaries to resize them
  • Shape tool + Shift: constrain the aspect ratio when committing a square / circle
  • Center-created circle: use the compass button to create a circle outward from the starting point as its center
  • Shape colors: switch 塗りのみ / 線のみ / 両方. With 両方, fill uses the primary color and the outline uses the secondary color
  • PP shape outline: turn PP ON to correct L-shaped overlaps on circular or curved outlines
  • Pixel-perfect pen: with a 1px brush, detect L-shaped overlaps during the stroke and restore the corner dot
  • Shift + click (Pen / Eraser): draw a straight line from the previous point to the current position
  • Shift + Ctrl + click (Pen / Eraser): draw the line snapped to clean 45°, 2:1, or 3:1-family ratios
  • Drag inside selection: move selected pixels
  • Selection transform buttons: flip horizontally / vertically, scale 2×, reduce to 1/2, or clear selection
  • Visible-layer selection operations: when ON, selection movement, flipping, and scaling apply to all visible layers together
  • Fill boundary mode: choose whether only the current layer or the composite of visible layers defines fill boundaries
  • ESC: close the editor

Layers

  • Manage the layer / folder tree in the right panel
  • Add a layer with +
  • Create a folder with the Add Folder button
  • Double-click a layer or folder to rename it
  • Click to switch the active layer
  • Ctrl / Cmd+click to select multiple items
  • Drag a multi-selection to reorder it together
  • Drop onto a folder to move items inside it
  • Expand / collapse by folder
  • Show / hide by folder
  • Delete, while retaining at least one layer
  • Drawing, filling, and erasing affect only the active layer
  • When a selection exists, drawing, filling, and erasing are limited to that area
  • In the selection tool, turning 可視レイヤー操作 ON makes movement / transformation target all visible layers
  • In the fill tool, setting 境界モード to 可視 uses the visible-layer composite for boundary detection while writing only to the active layer

Frames

  • Manage frames in the bottom frame strip
  • Add a frame with +
  • Duplicate the current frame with the Duplicate button
  • Delete the current frame with -, retaining at least one frame
  • Click a thumbnail to switch the active frame
  • Loop all frames with the Play button
  • Set global FPS on the right side of the frame strip
  • output returns only the current frame; spritesheet combines all frames
  • Connect directly to SpriteSheetPlayback or SpriteSheetToAseprite

Technical details

  • The current canonical save format is a v6 JSON envelope
    • document.width / height
    • document.colorMode: "direct" | "indexed"
    • items[]
    • frames[]
    • cels[]
    • document.fps
    • editorState.activeLayerId / activeFrameId
  • items[] is the layer / folder tree
  • frames[] is horizontal frame identity; cels[] is pixel data at the frameId + layerId intersection
  • Legacy single-image data migrates automatically to frame 0 when loaded
  • Legacy base64 PNG remains load-compatible
  • Retains editorState.activeLayerId, activeFrameId, and mode
  • document.palette
    • sourceMode: "local" | "follow"
    • localColors: RGBA[]
  • Undo/redo is layer-aware and managed per envelope
  • Node output is the current-frame Image after flattening visible layers in canonical order
  • It also packs all frames into the SpriteSheet contract and outputs them
  • The indexed_image output converts the current-frame image into an IndexedImage following active palette order
    • Transparent pixels use a dedicated IndexedImage transparency slot and do not count as ordinary palette colors
    • If the image contains a color outside the active palette, append it at output time before indexing
  • The palette output is the palette currently active in the editor
  • Project saving/loading retains it automatically
  • A pixel grid appears at zoom 4× or higher
  • A 150ms debounce optimizes performance

Related nodes

  • symmetry — the companion for drawing half, then mirroring
  • quick_shade / outline — go-to finishing for a hand-drawn base
  • indexed_image_apply_palette — replace colors in indexed output
  • image_load — use artwork drawn in an external tool
Back to Node List
Pixel Canvas — PixPipeline Node Reference