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
referenceto display it as a reference layer, useful for cleaning pixels over a 3D render or tracing a photograph. - Connect
paletteto 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_imageoutput 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
symmetrydownstream; 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〜16in 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
paletteinput is inFollow, 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
paletteinput connected, useL(Local) / F(Follow) / I(Import)Local: use the palette built into PixelCanvasFollow: use the input palette directly as the editor paletteImport: 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
- First-wave formats are
- 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
PPON 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
FPSon the right side of the frame strip outputreturns only the current frame;spritesheetcombines all frames- Connect directly to
SpriteSheetPlaybackorSpriteSheetToAseprite
Technical details
- The current canonical save format is a
v6 JSON envelopedocument.width / heightdocument.colorMode: "direct" | "indexed"items[]frames[]cels[]document.fpseditorState.activeLayerId / activeFrameId
items[]is thelayer/foldertreeframes[]is horizontal frame identity;cels[]is pixel data at theframeId + layerIdintersection- Legacy single-image data migrates automatically to
frame 0when loaded - Legacy base64 PNG remains load-compatible
- Retains
editorState.activeLayerId,activeFrameId, andmode document.palettesourceMode: "local" | "follow"localColors: RGBA[]
- Undo/redo is layer-aware and managed per envelope
- Node output is the current-frame
Imageafter flattening visible layers in canonical order - It also packs all frames into the
SpriteSheetcontract and outputs them - The
indexed_imageoutput converts the current-frame image into anIndexedImagefollowing 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
paletteoutput 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 mirroringquick_shade/outline— go-to finishing for a hand-drawn baseindexed_image_apply_palette— replace colors in indexed outputimage_load— use artwork drawn in an external tool