Art Canvas
The Art workspace is Opal's sprite-sequence baker. It turns image sheets, loose sprites, and existing .ssb bundles into reusable Sprite Sequence Bundle assets that can be previewed, re-timed, adjusted, and saved back to the library.
It is intentionally different from Motion and Rigging:
| Workspace | Best for | Output |
|---|---|---|
| Art | Cut sprite sheets, assemble flipbooks, bake effects, register frames | .ssb sprite sequence bundle assets |
| Motion | Keyframe an object moving, rotating, fading, scaling | Motion clips on scene objects |
| Rigging | Bone-based characters, skins, IK, mesh weights | Character assets and skeleton clips |
Important: Art Canvas bakes assets. It does not automatically bind the result onto the selected scene object. After saving a bundle, use the asset from the library or add it to Object Flow with a Sprite Sequence node.
When To Use It
Use Art Canvas when you have frame art and want Opal to treat it as one animation asset.
Open The Workspace
- Open a project in the editor.
- Import the source art with Add -> Library or Add -> Add Art.
- Click the Art workspace tab in the top bar.
- Use + Sheet, + Sprites, drag an asset from the library, or right-click the board.
The Art workspace is a node board. Source nodes produce frames, processing nodes transform those frames, Animation turns frames into a timed clip, Preview shows it, and Save .ssb writes it to the asset library.
Image -> Slice Sheet -> Animation -> Preview
|
-> Save .ssbBoard Basics
| Gesture or control | What it does |
|---|---|
| + Sheet | Pick one image and create a sheet pipeline |
| + Sprites | Pick several images and create a frame-by-frame pipeline |
| Bake All | Save every valid Save node on the board |
| Clear board | Remove every Art node from the current project graph |
| 100% | Reset board pan and zoom |
| Right-click empty board | Add a pipeline, add any Art node, import Aseprite JSON, or clear |
| Drag from a port | Wire compatible nodes together |
| Drag a wire to empty space | Open a filtered node menu for that wire type |
| Drop a pass-through node on a wire | Splice it into the pipeline when the types match |
| Shift-drag board background | Marquee-select nodes |
| Drag an image asset onto the board | Create a sheet pipeline at the drop point |
Drag a .ssb asset onto the board | Create a Sprite Sequence node |
The board graph is saved with the project, so your baking setup is still there when you return.
Core Nodes
| Node | Role |
|---|---|
| Image | Source image. Use its image output for slicing, or its frames output as a one-frame sequence |
| Sprites | Ordered list of individual sprite assets |
| Sprite Sequence | Existing .ssb bundle used as editable source frames |
| Slice Sheet | Grid-slice a sheet by columns, rows, margin, spacing, and max frame count |
| Atlas Frames | Define arbitrary rectangles when a sheet is packed or irregular |
| Join Frames | Concatenate several frame streams into one sequence |
| Tint | Bake hue, saturation, lightness, or flat tint changes into each frame |
| Flip | Mirror frames horizontally or vertically |
| Order | Reverse or ping-pong frame order |
| Outline | Bake a solid outline around each frame |
| Bake Scale | Resize baked output, useful for crisp pixel-art scale variants |
| Animation | Name the clip, set FPS, frame range, looping, holds, and registration |
| Preview | Playback monitor with its own transport, scrubber, zoom, and onion skin |
| Save .ssb | Save the incoming animation as a reusable sprite sequence bundle |
Slice A Sprite Sheet
Click + Sheet, choose the sheet image, and Opal creates an Image -> Slice Sheet -> Animation -> Preview -> Save chain.
On Slice Sheet, set columns, rows, margin, spacing, and max frame count. If frames are not a grid, use Atlas Frames instead.
On Animation, set a clear name, FPS, looping, and an optional From/To frame range.
Use the Preview node to play, scrub, zoom, and turn on Onion if frame registration needs work.
Click Save .ssb. The first save creates a bundle. Later saves overwrite the bundle in place unless you choose Save copy.
Build From Loose Sprites
Click + Sprites when every frame is already a separate image.
The frame strip becomes editable for direct Sprites pipelines:
| Action | Where |
|---|---|
| Reorder frames | Drag a frame cell in the strip |
| Add frames | Click + Add frames... |
| Duplicate / remove | Right-click a frame cell |
| Hold a frame longer | Select it and set Hold in Frame Registration |
This is the fastest path for hand-drawn frames, exported animation frames, or small VFX sequences.
Frame Registration
Many sprite sheets wobble because each frame has different transparent padding or a slightly different foot position. The docked Frame Registration panel fixes that before you save.
Controls:
| Control | Use |
|---|---|
| Frame | Select the frame to edit |
| Hold | Make the selected frame last multiple ticks |
| X / Y | Nudge the frame inside the output box |
| Scale | Resize the selected frame |
| Rot | Rotate the selected frame |
| Center | Reset selected frame position to the center |
| Reset frame | Clear registration for the selected frame |
| Onion | Ghost neighboring frames under the current one |
| Apply to all | Copy the current registration adjustment to every frame |
| Match height | Normalize visual height across frames |
| Align feet | Keep feet or baseline stable across frames |
Registration bakes into the saved sequence. The Preview node uses the same drawing path as Save, so what you see is what the bundle will contain.
Effects And Variants
Art nodes are intentionally composable. You can branch one source into several variants:
Image -> Slice Sheet -> Animation "walk_right" -> Save .ssb
|
-> Flip -> Animation "walk_left" -> Save .ssb
|
-> Tint -> Outline -> Animation "walk_poison" -> Save .ssbGood variant uses:
- Flip to make left-facing clips from right-facing sheets.
- Tint to create team colors, damage flashes, poison states, or rarity variants.
- Outline to make pickups and interactable objects read clearly.
- Order with ping-pong for loops that should bounce instead of snapping back.
- Bake Scale for pixel-art sizes that should stay crisp in game.
Save And Use The Bundle
After saving, the Save node can show handoff links:
| Link | What it does |
|---|---|
| Reveal in Library | Opens the saved .ssb asset in the asset library |
| Use in Object Flow | Adds a Sprite Sequence value node for the selected object's Object Flow |
Use a saved bundle when a graph needs to switch or play sprite frames at runtime. For example, an enemy can play slime_hit.ssb after a collision event, then return to slime_idle.ssb.
Use Motion instead when you want to animate the object transform itself. Use Art when the pixels inside the sprite change frame by frame.
Naming And Organization
Name bundles by game role and state:
| Weak | Better |
|---|---|
Animation | player_idle |
walk | player_walk_right |
new sequence | coin_spin_gold |
sheet copy | slime_hit_poison |
Save related variants near the source art. The Save node tries to place the bundle near its source image, sprite list, or existing bundle folder.
Troubleshooting
| Problem | First checks |
|---|---|
| Preview is empty | Confirm Image/Sprites/Sprite Sequence is wired into Animation and Animation is wired into Preview |
| Save button is disabled | The Save node needs an Animation with at least one frame |
| Sliced frames look wrong | Recheck columns, rows, margin, spacing, and max frame count |
| Animation jitters | Use Frame Registration, Onion, Align feet, or Match height |
| Saved variant did not change | Processing nodes must be wired before Animation, then save again |
| I cannot find the result | Use Reveal in Library or search for the Animation name |